/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "X2AP-IEs"
 * 	found in "Spec/e2ap-v031ex.asn"
 * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER`
 */

#ifndef	_ManagementBasedMDTallowed_H_
#define	_ManagementBasedMDTallowed_H_


#include <asn_application.h>

/* Including external dependencies */
#include <NativeEnumerated.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum ManagementBasedMDTallowed {
	ManagementBasedMDTallowed_allowed	= 0
	/*
	 * Enumeration is extensible
	 */
} e_ManagementBasedMDTallowed;

/* ManagementBasedMDTallowed */
typedef long	 ManagementBasedMDTallowed_t;

/* Implementation */
extern asn_per_constraints_t asn_PER_type_ManagementBasedMDTallowed_constr_1;
extern asn_TYPE_descriptor_t asn_DEF_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;
oer_type_decoder_f ManagementBasedMDTallowed_decode_oer;
oer_type_encoder_f ManagementBasedMDTallowed_encode_oer;
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	/* _ManagementBasedMDTallowed_H_ */
#include <asn_internal.h>
