/*****************************************************************************
#                                                                            *
# Copyright 2019 AT&T Intellectual Property                                  *
#                                                                            *
# Licensed under the Apache License, Version 2.0 (the "License");            *
# you may not use this file except in compliance with the License.           *
# You may obtain a copy of the License at                                    *
#                                                                            *
#      http://www.apache.org/licenses/LICENSE-2.0                            *
#                                                                            *
# Unless required by applicable law or agreed to in writing, software        *
# distributed under the License is distributed on an "AS IS" BASIS,          *
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   *
# See the License for the specific language governing permissions and        *
# limitations under the License.                                             *
#                                                                            *
******************************************************************************/

/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "X2AP-Containers"
 * 	found in "../../asnFiles/X2AP-Containers.asn"
 * 	`asn1c -fcompound-names -fincludes-quoted -fno-include-deps -findirect-choice -gen-PER -no-gen-OER -D.`
 */

#include "ProtocolIE-Single-Container.h"

/*
 * This type is implemented using RICaction_ToBeSetup_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using RICaction_Admitted_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using RICaction_NotAdmitted_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using RANfunction_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using RANfunctionID_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using RANfunctionIDcause_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeSetup_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_Admitted_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_SubjectToStatusTransfer_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using CellInformation_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using CellToReport_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using MeasurementInitiationResult_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using MeasurementFailureCause_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using CompleteFailureCauseInformation_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using CellMeasurementResult_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeAdded_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_Admitted_ToBeAdded_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeAdded_ModReqItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeModified_ModReqItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeReleased_ModReqItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_Admitted_ToBeAdded_ModAckItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_Admitted_ToBeModified_ModAckItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_Admitted_ToBeReleased_ModAckItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeReleased_ModReqdItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeReleased_RelReqItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeReleased_RelConfItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_SubjectToCounterCheckItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeSetupRetrieve_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeAdded_SgNBAddReq_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeAdded_SgNBModReq_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeModified_SgNBModReq_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeReleased_SgNBModReq_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeReleased_SgNBModReqd_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeModified_SgNBModReqd_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeReleased_SgNBRelReq_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeReleased_SgNBRelConf_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_SubjectToSgNBCounterCheck_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_ToBeReleased_SgNBChaConf_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABs_DataForwardingAddress_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RAB_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using E_RABUsageReport_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using SecondaryRATUsageReport_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P0_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P0 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P0_tags_1,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P0_tags_1)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P0_tags_1[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P0_tags_1,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P0_tags_1)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P0_tags_1[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_RICaction_ToBeSetup_ItemIEs_1,
	3,	/* Elements count */
	&asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P1_tags_2[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P1 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P1_tags_2,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P1_tags_2)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P1_tags_2[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P1_tags_2,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P1_tags_2)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P1_tags_2[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_RICaction_Admitted_ItemIEs_5,
	3,	/* Elements count */
	&asn_SPC_RICaction_Admitted_ItemIEs_specs_5	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P2_tags_3[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P2 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P2_tags_3,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P2_tags_3)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P2_tags_3[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P2_tags_3,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P2_tags_3)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P2_tags_3[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_RICaction_NotAdmitted_ItemIEs_9,
	3,	/* Elements count */
	&asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P3_tags_4[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P3 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P3_tags_4,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P3_tags_4)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P3_tags_4[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P3_tags_4,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P3_tags_4)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P3_tags_4[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_RANfunction_ItemIEs_13,
	3,	/* Elements count */
	&asn_SPC_RANfunction_ItemIEs_specs_13	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P4_tags_5[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P4 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P4_tags_5,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P4_tags_5)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P4_tags_5[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P4_tags_5,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P4_tags_5)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P4_tags_5[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_RANfunctionID_ItemIEs_17,
	3,	/* Elements count */
	&asn_SPC_RANfunctionID_ItemIEs_specs_17	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P5_tags_6[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P5 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P5_tags_6,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P5_tags_6)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P5_tags_6[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P5_tags_6,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P5_tags_6)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P5_tags_6[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_RANfunctionIDcause_ItemIEs_21,
	3,	/* Elements count */
	&asn_SPC_RANfunctionIDcause_ItemIEs_specs_21	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P6_tags_7[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P6 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P6_tags_7,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P6_tags_7)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P6_tags_7[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P6_tags_7,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P6_tags_7)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P6_tags_7[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeSetup_ItemIEs_25,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeSetup_ItemIEs_specs_25	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P7_tags_8[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P7 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P7_tags_8,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P7_tags_8)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P7_tags_8[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P7_tags_8,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P7_tags_8)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P7_tags_8[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_Admitted_ItemIEs_29,
	3,	/* Elements count */
	&asn_SPC_E_RABs_Admitted_ItemIEs_specs_29	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P8_tags_9[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P8 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P8_tags_9,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P8_tags_9)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P8_tags_9[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P8_tags_9,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P8_tags_9)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P8_tags_9[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_SubjectToStatusTransfer_ItemIEs_33,
	3,	/* Elements count */
	&asn_SPC_E_RABs_SubjectToStatusTransfer_ItemIEs_specs_33	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P9_tags_10[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P9 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P9_tags_10,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P9_tags_10)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P9_tags_10[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P9_tags_10,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P9_tags_10)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P9_tags_10[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_CellInformation_ItemIEs_37,
	3,	/* Elements count */
	&asn_SPC_CellInformation_ItemIEs_specs_37	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P10_tags_11[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P10 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P10_tags_11,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P10_tags_11)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P10_tags_11[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P10_tags_11,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P10_tags_11)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P10_tags_11[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_CellToReport_ItemIEs_41,
	3,	/* Elements count */
	&asn_SPC_CellToReport_ItemIEs_specs_41	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P11_tags_12[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P11 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P11_tags_12,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P11_tags_12)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P11_tags_12[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P11_tags_12,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P11_tags_12)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P11_tags_12[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_MeasurementInitiationResult_ItemIEs_45,
	3,	/* Elements count */
	&asn_SPC_MeasurementInitiationResult_ItemIEs_specs_45	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P12_tags_13[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P12 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P12_tags_13,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P12_tags_13)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P12_tags_13[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P12_tags_13,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P12_tags_13)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P12_tags_13[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_MeasurementFailureCause_ItemIEs_49,
	3,	/* Elements count */
	&asn_SPC_MeasurementFailureCause_ItemIEs_specs_49	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P13_tags_14[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P13 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P13_tags_14,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P13_tags_14)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P13_tags_14[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P13_tags_14,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P13_tags_14)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P13_tags_14[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_CompleteFailureCauseInformation_ItemIEs_53,
	3,	/* Elements count */
	&asn_SPC_CompleteFailureCauseInformation_ItemIEs_specs_53	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P14_tags_15[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P14 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P14_tags_15,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P14_tags_15)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P14_tags_15[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P14_tags_15,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P14_tags_15)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P14_tags_15[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_CellMeasurementResult_ItemIEs_57,
	3,	/* Elements count */
	&asn_SPC_CellMeasurementResult_ItemIEs_specs_57	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P15_tags_16[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P15 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P15_tags_16,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P15_tags_16)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P15_tags_16[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P15_tags_16,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P15_tags_16)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P15_tags_16[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeAdded_ItemIEs_61,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeAdded_ItemIEs_specs_61	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P16_tags_17[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P16 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P16_tags_17,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P16_tags_17)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P16_tags_17[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P16_tags_17,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P16_tags_17)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P16_tags_17[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_Admitted_ToBeAdded_ItemIEs_65,
	3,	/* Elements count */
	&asn_SPC_E_RABs_Admitted_ToBeAdded_ItemIEs_specs_65	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P17_tags_18[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P17 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P17_tags_18,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P17_tags_18)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P17_tags_18[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P17_tags_18,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P17_tags_18)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P17_tags_18[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeAdded_ModReqItemIEs_69,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeAdded_ModReqItemIEs_specs_69	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P18_tags_19[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P18 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P18_tags_19,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P18_tags_19)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P18_tags_19[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P18_tags_19,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P18_tags_19)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P18_tags_19[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeModified_ModReqItemIEs_73,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeModified_ModReqItemIEs_specs_73	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P19_tags_20[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P19 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P19_tags_20,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P19_tags_20)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P19_tags_20[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P19_tags_20,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P19_tags_20)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P19_tags_20[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeReleased_ModReqItemIEs_77,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeReleased_ModReqItemIEs_specs_77	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P20_tags_21[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P20 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P20_tags_21,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P20_tags_21)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P20_tags_21[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P20_tags_21,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P20_tags_21)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P20_tags_21[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_81,
	3,	/* Elements count */
	&asn_SPC_E_RABs_Admitted_ToBeAdded_ModAckItemIEs_specs_81	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P21_tags_22[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P21 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P21_tags_22,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P21_tags_22)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P21_tags_22[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P21_tags_22,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P21_tags_22)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P21_tags_22[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_Admitted_ToBeModified_ModAckItemIEs_85,
	3,	/* Elements count */
	&asn_SPC_E_RABs_Admitted_ToBeModified_ModAckItemIEs_specs_85	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P22_tags_23[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P22 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P22_tags_23,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P22_tags_23)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P22_tags_23[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P22_tags_23,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P22_tags_23)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P22_tags_23[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_89,
	3,	/* Elements count */
	&asn_SPC_E_RABs_Admitted_ToBeReleased_ModAckItemIEs_specs_89	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P23_tags_24[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P23 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P23_tags_24,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P23_tags_24)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P23_tags_24[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P23_tags_24,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P23_tags_24)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P23_tags_24[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeReleased_ModReqdItemIEs_93,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeReleased_ModReqdItemIEs_specs_93	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P24_tags_25[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P24 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P24_tags_25,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P24_tags_25)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P24_tags_25[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P24_tags_25,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P24_tags_25)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P24_tags_25[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeReleased_RelReqItemIEs_97,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeReleased_RelReqItemIEs_specs_97	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P25_tags_26[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P25 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P25_tags_26,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P25_tags_26)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P25_tags_26[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P25_tags_26,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P25_tags_26)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P25_tags_26[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeReleased_RelConfItemIEs_101,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeReleased_RelConfItemIEs_specs_101	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P26_tags_27[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P26 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P26_tags_27,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P26_tags_27)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P26_tags_27[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P26_tags_27,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P26_tags_27)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P26_tags_27[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_SubjectToCounterCheckItemIEs_105,
	3,	/* Elements count */
	&asn_SPC_E_RABs_SubjectToCounterCheckItemIEs_specs_105	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P27_tags_28[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P27 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P27_tags_28,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P27_tags_28)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P27_tags_28[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P27_tags_28,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P27_tags_28)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P27_tags_28[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeSetupRetrieve_ItemIEs_109,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeSetupRetrieve_ItemIEs_specs_109	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P28_tags_29[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P28 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P28_tags_29,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P28_tags_29)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P28_tags_29[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P28_tags_29,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P28_tags_29)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P28_tags_29[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_113,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_specs_113	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P29_tags_30[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P29 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P29_tags_30,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P29_tags_30)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P29_tags_30[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P29_tags_30,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P29_tags_30)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P29_tags_30[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_117,
	3,	/* Elements count */
	&asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_specs_117	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P30_tags_31[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P30 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P30_tags_31,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P30_tags_31)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P30_tags_31[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P30_tags_31,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P30_tags_31)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P30_tags_31[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_121,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeAdded_SgNBModReq_ItemIEs_specs_121	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P31_tags_32[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P31 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P31_tags_32,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P31_tags_32)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P31_tags_32[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P31_tags_32,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P31_tags_32)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P31_tags_32[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeModified_SgNBModReq_ItemIEs_125,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeModified_SgNBModReq_ItemIEs_specs_125	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P32_tags_33[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P32 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P32_tags_33,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P32_tags_33)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P32_tags_33[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P32_tags_33,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P32_tags_33)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P32_tags_33[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_129,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeReleased_SgNBModReq_ItemIEs_specs_129	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P33_tags_34[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P33 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P33_tags_34,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P33_tags_34)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P33_tags_34[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P33_tags_34,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P33_tags_34)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P33_tags_34[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_133,
	3,	/* Elements count */
	&asn_SPC_E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs_specs_133	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P34_tags_35[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P34 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P34_tags_35,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P34_tags_35)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P34_tags_35[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P34_tags_35,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P34_tags_35)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P34_tags_35[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_137,
	3,	/* Elements count */
	&asn_SPC_E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs_specs_137	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P35_tags_36[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P35 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P35_tags_36,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P35_tags_36)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P35_tags_36[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P35_tags_36,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P35_tags_36)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P35_tags_36[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_141,
	3,	/* Elements count */
	&asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs_specs_141	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P36_tags_37[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P36 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P36_tags_37,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P36_tags_37)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P36_tags_37[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P36_tags_37,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P36_tags_37)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P36_tags_37[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_145,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeReleased_SgNBModReqd_ItemIEs_specs_145	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P37_tags_38[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P37 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P37_tags_38,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P37_tags_38)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P37_tags_38[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P37_tags_38,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P37_tags_38)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P37_tags_38[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_149,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeModified_SgNBModReqd_ItemIEs_specs_149	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P38_tags_39[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P38 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P38_tags_39,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P38_tags_39)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P38_tags_39[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P38_tags_39,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P38_tags_39)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P38_tags_39[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_153,
	3,	/* Elements count */
	&asn_SPC_E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs_specs_153	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P39_tags_40[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P39 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P39_tags_40,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P39_tags_40)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P39_tags_40[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P39_tags_40,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P39_tags_40)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P39_tags_40[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_157,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeReleased_SgNBRelReq_ItemIEs_specs_157	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P40_tags_41[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P40 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P40_tags_41,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P40_tags_41)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P40_tags_41[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P40_tags_41,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P40_tags_41)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P40_tags_41[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_161,
	3,	/* Elements count */
	&asn_SPC_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs_specs_161	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P41_tags_42[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P41 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P41_tags_42,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P41_tags_42)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P41_tags_42[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P41_tags_42,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P41_tags_42)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P41_tags_42[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_165,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs_specs_165	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P42_tags_43[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P42 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P42_tags_43,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P42_tags_43)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P42_tags_43[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P42_tags_43,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P42_tags_43)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P42_tags_43[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_169,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeReleased_SgNBRelConf_ItemIEs_specs_169	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P43_tags_44[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P43 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P43_tags_44,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P43_tags_44)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P43_tags_44[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P43_tags_44,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P43_tags_44)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P43_tags_44[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_173,
	3,	/* Elements count */
	&asn_SPC_E_RABs_SubjectToSgNBCounterCheck_ItemIEs_specs_173	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P44_tags_45[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P44 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P44_tags_45,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P44_tags_45)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P44_tags_45[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P44_tags_45,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P44_tags_45)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P44_tags_45[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_177,
	3,	/* Elements count */
	&asn_SPC_E_RABs_ToBeReleased_SgNBChaConf_ItemIEs_specs_177	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P45_tags_46[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P45 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P45_tags_46,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P45_tags_46)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P45_tags_46[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P45_tags_46,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P45_tags_46)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P45_tags_46[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABs_DataForwardingAddress_ItemIEs_181,
	3,	/* Elements count */
	&asn_SPC_E_RABs_DataForwardingAddress_ItemIEs_specs_181	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P46_tags_47[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P46 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P46_tags_47,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P46_tags_47)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P46_tags_47[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P46_tags_47,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P46_tags_47)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P46_tags_47[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RAB_ItemIEs_665,
	3,	/* Elements count */
	&asn_SPC_E_RAB_ItemIEs_specs_665	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P47_tags_48[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P47 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P47_tags_48,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P47_tags_48)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P47_tags_48[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P47_tags_48,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P47_tags_48)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P47_tags_48[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_E_RABUsageReport_ItemIEs_669,
	3,	/* Elements count */
	&asn_SPC_E_RABUsageReport_ItemIEs_specs_669	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_122P48_tags_49[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_122P48 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_122P48_tags_49,
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P48_tags_49)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P48_tags_49[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_122P48_tags_49,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_122P48_tags_49)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_122P48_tags_49[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_SecondaryRATUsageReport_ItemIEs_673,
	3,	/* Elements count */
	&asn_SPC_SecondaryRATUsageReport_ItemIEs_specs_673	/* Additional specs */
};

