/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "E2AP-Containers"
 * 	found in "e2ap-oran-wg3-v01.00.asn"
 * 	`asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER`
 */

#include "ProtocolIE-Container.h"

#include "ProtocolIE-Field.h"
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P0_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_ProtocolIE_Container_1412P1_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_ProtocolIE_Container_1412P2_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_ProtocolIE_Container_1412P3_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_ProtocolIE_Container_1412P4_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_ProtocolIE_Container_1412P5_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_ProtocolIE_Container_1412P6_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_ProtocolIE_Container_1412P7_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_ProtocolIE_Container_1412P8_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_ProtocolIE_Container_1412P9_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_ProtocolIE_Container_1412P10_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_ProtocolIE_Container_1412P11_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_ProtocolIE_Container_1412P12_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_ProtocolIE_Container_1412P13_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_ProtocolIE_Container_1412P14_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_ProtocolIE_Container_1412P15_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_ProtocolIE_Container_1412P16_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_ProtocolIE_Container_1412P17_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_ProtocolIE_Container_1412P18_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_ProtocolIE_Container_1412P19_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_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P0_1[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICsubscriptionRequest_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P0_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P0_specs_1 = {
	sizeof(struct ProtocolIE_Container_1412P0),
	offsetof(struct ProtocolIE_Container_1412P0, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P0 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P0_tags_1,
	sizeof(asn_DEF_ProtocolIE_Container_1412P0_tags_1)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P0_tags_1[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P0_tags_1,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P0_tags_1)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P0_tags_1[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P0_constr_1, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P0_1,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P0_specs_1	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P1_3[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICsubscriptionResponse_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P1_tags_3[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P1_specs_3 = {
	sizeof(struct ProtocolIE_Container_1412P1),
	offsetof(struct ProtocolIE_Container_1412P1, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P1 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P1_tags_3,
	sizeof(asn_DEF_ProtocolIE_Container_1412P1_tags_3)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P1_tags_3[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P1_tags_3,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P1_tags_3)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P1_tags_3[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P1_constr_3, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P1_3,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P1_specs_3	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P2_5[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICsubscriptionFailure_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P2_tags_5[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P2_specs_5 = {
	sizeof(struct ProtocolIE_Container_1412P2),
	offsetof(struct ProtocolIE_Container_1412P2, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P2 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P2_tags_5,
	sizeof(asn_DEF_ProtocolIE_Container_1412P2_tags_5)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P2_tags_5[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P2_tags_5,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P2_tags_5)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P2_tags_5[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P2_constr_5, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P2_5,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P2_specs_5	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P3_7[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICsubscriptionDeleteRequest_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P3_tags_7[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P3_specs_7 = {
	sizeof(struct ProtocolIE_Container_1412P3),
	offsetof(struct ProtocolIE_Container_1412P3, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P3 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P3_tags_7,
	sizeof(asn_DEF_ProtocolIE_Container_1412P3_tags_7)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P3_tags_7[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P3_tags_7,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P3_tags_7)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P3_tags_7[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P3_constr_7, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P3_7,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P3_specs_7	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P4_9[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICsubscriptionDeleteResponse_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P4_tags_9[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P4_specs_9 = {
	sizeof(struct ProtocolIE_Container_1412P4),
	offsetof(struct ProtocolIE_Container_1412P4, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P4 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P4_tags_9,
	sizeof(asn_DEF_ProtocolIE_Container_1412P4_tags_9)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P4_tags_9[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P4_tags_9,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P4_tags_9)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P4_tags_9[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P4_constr_9, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P4_9,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P4_specs_9	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P5_11[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICsubscriptionDeleteFailure_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P5_tags_11[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P5_specs_11 = {
	sizeof(struct ProtocolIE_Container_1412P5),
	offsetof(struct ProtocolIE_Container_1412P5, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P5 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P5_tags_11,
	sizeof(asn_DEF_ProtocolIE_Container_1412P5_tags_11)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P5_tags_11[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P5_tags_11,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P5_tags_11)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P5_tags_11[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P5_constr_11, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P5_11,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P5_specs_11	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P6_13[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICindication_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P6_tags_13[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P6_specs_13 = {
	sizeof(struct ProtocolIE_Container_1412P6),
	offsetof(struct ProtocolIE_Container_1412P6, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P6 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P6_tags_13,
	sizeof(asn_DEF_ProtocolIE_Container_1412P6_tags_13)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P6_tags_13[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P6_tags_13,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P6_tags_13)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P6_tags_13[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P6_constr_13, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P6_13,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P6_specs_13	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P7_15[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICcontrolRequest_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P7_tags_15[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P7_specs_15 = {
	sizeof(struct ProtocolIE_Container_1412P7),
	offsetof(struct ProtocolIE_Container_1412P7, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P7 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P7_tags_15,
	sizeof(asn_DEF_ProtocolIE_Container_1412P7_tags_15)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P7_tags_15[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P7_tags_15,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P7_tags_15)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P7_tags_15[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P7_constr_15, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P7_15,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P7_specs_15	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P8_17[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICcontrolAcknowledge_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P8_tags_17[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P8_specs_17 = {
	sizeof(struct ProtocolIE_Container_1412P8),
	offsetof(struct ProtocolIE_Container_1412P8, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P8 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P8_tags_17,
	sizeof(asn_DEF_ProtocolIE_Container_1412P8_tags_17)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P8_tags_17[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P8_tags_17,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P8_tags_17)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P8_tags_17[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P8_constr_17, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P8_17,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P8_specs_17	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P9_19[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICcontrolFailure_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P9_tags_19[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P9_specs_19 = {
	sizeof(struct ProtocolIE_Container_1412P9),
	offsetof(struct ProtocolIE_Container_1412P9, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P9 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P9_tags_19,
	sizeof(asn_DEF_ProtocolIE_Container_1412P9_tags_19)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P9_tags_19[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P9_tags_19,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P9_tags_19)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P9_tags_19[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P9_constr_19, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P9_19,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P9_specs_19	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P10_21[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_ErrorIndication_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P10_tags_21[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P10_specs_21 = {
	sizeof(struct ProtocolIE_Container_1412P10),
	offsetof(struct ProtocolIE_Container_1412P10, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P10 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P10_tags_21,
	sizeof(asn_DEF_ProtocolIE_Container_1412P10_tags_21)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P10_tags_21[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P10_tags_21,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P10_tags_21)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P10_tags_21[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P10_constr_21, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P10_21,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P10_specs_21	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P11_23[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_E2setupRequestIEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P11_tags_23[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P11_specs_23 = {
	sizeof(struct ProtocolIE_Container_1412P11),
	offsetof(struct ProtocolIE_Container_1412P11, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P11 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P11_tags_23,
	sizeof(asn_DEF_ProtocolIE_Container_1412P11_tags_23)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P11_tags_23[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P11_tags_23,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P11_tags_23)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P11_tags_23[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P11_constr_23, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P11_23,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P11_specs_23	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P12_25[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_E2setupResponseIEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P12_tags_25[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P12_specs_25 = {
	sizeof(struct ProtocolIE_Container_1412P12),
	offsetof(struct ProtocolIE_Container_1412P12, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P12 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P12_tags_25,
	sizeof(asn_DEF_ProtocolIE_Container_1412P12_tags_25)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P12_tags_25[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P12_tags_25,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P12_tags_25)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P12_tags_25[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P12_constr_25, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P12_25,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P12_specs_25	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P13_27[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_E2setupFailureIEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P13_tags_27[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P13_specs_27 = {
	sizeof(struct ProtocolIE_Container_1412P13),
	offsetof(struct ProtocolIE_Container_1412P13, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P13 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P13_tags_27,
	sizeof(asn_DEF_ProtocolIE_Container_1412P13_tags_27)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P13_tags_27[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P13_tags_27,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P13_tags_27)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P13_tags_27[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P13_constr_27, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P13_27,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P13_specs_27	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P14_29[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_ResetRequestIEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P14_tags_29[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P14_specs_29 = {
	sizeof(struct ProtocolIE_Container_1412P14),
	offsetof(struct ProtocolIE_Container_1412P14, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P14 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P14_tags_29,
	sizeof(asn_DEF_ProtocolIE_Container_1412P14_tags_29)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P14_tags_29[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P14_tags_29,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P14_tags_29)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P14_tags_29[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P14_constr_29, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P14_29,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P14_specs_29	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P15_31[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_ResetResponseIEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P15_tags_31[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P15_specs_31 = {
	sizeof(struct ProtocolIE_Container_1412P15),
	offsetof(struct ProtocolIE_Container_1412P15, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P15 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P15_tags_31,
	sizeof(asn_DEF_ProtocolIE_Container_1412P15_tags_31)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P15_tags_31[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P15_tags_31,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P15_tags_31)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P15_tags_31[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P15_constr_31, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P15_31,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P15_specs_31	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P16_33[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICserviceUpdate_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P16_tags_33[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P16_specs_33 = {
	sizeof(struct ProtocolIE_Container_1412P16),
	offsetof(struct ProtocolIE_Container_1412P16, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P16 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P16_tags_33,
	sizeof(asn_DEF_ProtocolIE_Container_1412P16_tags_33)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P16_tags_33[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P16_tags_33,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P16_tags_33)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P16_tags_33[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P16_constr_33, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P16_33,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P16_specs_33	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P17_35[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICserviceUpdateAcknowledge_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P17_tags_35[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P17_specs_35 = {
	sizeof(struct ProtocolIE_Container_1412P17),
	offsetof(struct ProtocolIE_Container_1412P17, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P17 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P17_tags_35,
	sizeof(asn_DEF_ProtocolIE_Container_1412P17_tags_35)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P17_tags_35[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P17_tags_35,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P17_tags_35)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P17_tags_35[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P17_constr_35, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P17_35,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P17_specs_35	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P18_37[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICserviceUpdateFailure_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P18_tags_37[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P18_specs_37 = {
	sizeof(struct ProtocolIE_Container_1412P18),
	offsetof(struct ProtocolIE_Container_1412P18, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P18 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P18_tags_37,
	sizeof(asn_DEF_ProtocolIE_Container_1412P18_tags_37)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P18_tags_37[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P18_tags_37,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P18_tags_37)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P18_tags_37[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P18_constr_37, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P18_37,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P18_specs_37	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P19_39[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICserviceQuery_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P19_tags_39[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P19_specs_39 = {
	sizeof(struct ProtocolIE_Container_1412P19),
	offsetof(struct ProtocolIE_Container_1412P19, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P19 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P19_tags_39,
	sizeof(asn_DEF_ProtocolIE_Container_1412P19_tags_39)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P19_tags_39[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P19_tags_39,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P19_tags_39)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P19_tags_39[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P19_constr_39, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P19_39,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P19_specs_39	/* Additional specs */
};

