diff --git a/asn1/rua/ffasn1c/out.c b/asn1/rua/ffasn1c/out.c
new file mode 100644
index 0000000..34c6e0b
--- /dev/null
+++ b/asn1/rua/ffasn1c/out.c
@@ -0,0 +1,2044 @@
+/* Automatically generated file - do not edit */
+
+#include "asn1defs.h"
+#include "out.h"
+
+const ASN1CType asn1_type_Criticality[] = {
+  (ASN1_CTYPE_ENUMERATED << ASN1_CTYPE_SHIFT) | 0x4000000 | 0xa,
+  3,
+  (intptr_t)"reject",
+  (intptr_t)"ignore",
+  (intptr_t)"notify",
+  (intptr_t)"Criticality",
+};
+
+const ASN1CType asn1_type_Presence[] = {
+  (ASN1_CTYPE_ENUMERATED << ASN1_CTYPE_SHIFT) | 0x4000000 | 0xa,
+  3,
+  (intptr_t)"optional",
+  (intptr_t)"conditional",
+  (intptr_t)"mandatory",
+  (intptr_t)"Presence",
+};
+
+const ASN1CType asn1_type_ProcedureCode[] = {
+  (ASN1_CTYPE_INTEGER << ASN1_CTYPE_SHIFT) | 0x5800000 | 0x2,
+  0x0,
+  0xff,
+  (intptr_t)"ProcedureCode",
+};
+
+static const ASN1CType asn1_type__local_0[] = {
+  (ASN1_CTYPE_INTEGER << ASN1_CTYPE_SHIFT) | 0x1800000 | 0x100000,
+  0x0,
+  0xffff,
+};
+
+static const ASN1CType asn1_type__local_1[] = {
+  (ASN1_CTYPE_OBJECT_IDENTIFIER << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+};
+
+const ASN1CType asn1_type_PrivateIE_ID[] = {
+  (ASN1_CTYPE_CHOICE << ASN1_CTYPE_SHIFT) | 0x4000000 | 0x0,
+  2,
+  sizeof(PrivateIE_ID),
+  offsetof(PrivateIE_ID, choice),
+  offsetof(PrivateIE_ID, u),
+  (intptr_t)asn1_type__local_0,
+  (intptr_t)"local",
+  (intptr_t)asn1_type__local_1,
+  (intptr_t)"global",
+  (intptr_t)"PrivateIE-ID",
+};
+
+const ASN1CType asn1_type_ProtocolIE_ID[] = {
+  (ASN1_CTYPE_INTEGER << ASN1_CTYPE_SHIFT) | 0x5800000 | 0x2,
+  0x0,
+  0xffff,
+  (intptr_t)"ProtocolIE-ID",
+};
+
+const ASN1CType asn1_type_TriggeringMessage[] = {
+  (ASN1_CTYPE_ENUMERATED << ASN1_CTYPE_SHIFT) | 0x4000000 | 0x100001,
+  3,
+  (intptr_t)"initiating-message",
+  (intptr_t)"successful-outcome",
+  (intptr_t)"unsuccessful-outcome",
+  (intptr_t)"TriggeringMessage",
+};
+
+const ASN1CType asn1_type_RUA_PRIVATE_IES[] = {
+  (ASN1_CTYPE_OBJECT_CLASS << ASN1_CTYPE_SHIFT) | 0x4000000 | 0x0,
+  4,
+
+  0x1,
+  (intptr_t)asn1_type_PrivateIE_ID,
+  0,
+  (intptr_t)"&id",
+
+  0x1,
+  (intptr_t)asn1_type_Criticality,
+  0,
+  (intptr_t)"&criticality",
+
+  0x0,
+  0,
+  0,
+  (intptr_t)"&Value",
+
+  0x1,
+  (intptr_t)asn1_type_Presence,
+  0,
+  (intptr_t)"&presence",
+  (intptr_t)"RUA-PRIVATE-IES",
+};
+
+const ASN1CType asn1_type_RUA_PROTOCOL_IES[] = {
+  (ASN1_CTYPE_OBJECT_CLASS << ASN1_CTYPE_SHIFT) | 0x4000000 | 0x0,
+  4,
+
+  0x1,
+  (intptr_t)asn1_type_ProtocolIE_ID,
+  0,
+  (intptr_t)"&id",
+
+  0x1,
+  (intptr_t)asn1_type_Criticality,
+  0,
+  (intptr_t)"&criticality",
+
+  0x0,
+  0,
+  0,
+  (intptr_t)"&Value",
+
+  0x1,
+  (intptr_t)asn1_type_Presence,
+  0,
+  (intptr_t)"&presence",
+  (intptr_t)"RUA-PROTOCOL-IES",
+};
+
+const ASN1CType asn1_type_RUA_PROTOCOL_EXTENSION[] = {
+  (ASN1_CTYPE_OBJECT_CLASS << ASN1_CTYPE_SHIFT) | 0x4000000 | 0x0,
+  4,
+
+  0x1,
+  (intptr_t)asn1_type_ProtocolIE_ID,
+  0,
+  (intptr_t)"&id",
+
+  0x1,
+  (intptr_t)asn1_type_Criticality,
+  0,
+  (intptr_t)"&criticality",
+
+  0x0,
+  0,
+  0,
+  (intptr_t)"&Extension",
+
+  0x1,
+  (intptr_t)asn1_type_Presence,
+  0,
+  (intptr_t)"&presence",
+  (intptr_t)"RUA-PROTOCOL-EXTENSION",
+};
+
+const ASN1CType asn1_type_ProtocolIE_Container_1[] = {
+  (ASN1_CTYPE_SEQUENCE_OF << ASN1_CTYPE_SHIFT) | 0x1800000 | 0x100000,
+  0x0,
+  0xffff,
+  sizeof(ProtocolIE_Field_1),
+  (intptr_t)asn1_type_ProtocolIE_Field_1,
+  0,
+};
+
+const ASN1CType asn1_type_ProtocolIE_Container_2[] = {
+  (ASN1_CTYPE_SEQUENCE_OF << ASN1_CTYPE_SHIFT) | 0x1800000 | 0x100000,
+  0x0,
+  0xffff,
+  sizeof(ProtocolIE_Field_2),
+  (intptr_t)asn1_type_ProtocolIE_Field_2,
+  0,
+};
+
+const ASN1CType asn1_type_ProtocolIE_Container_3[] = {
+  (ASN1_CTYPE_SEQUENCE_OF << ASN1_CTYPE_SHIFT) | 0x1800000 | 0x100000,
+  0x0,
+  0xffff,
+  sizeof(ProtocolIE_Field_3),
+  (intptr_t)asn1_type_ProtocolIE_Field_3,
+  0,
+};
+
+const ASN1CType asn1_type_ProtocolIE_Container_4[] = {
+  (ASN1_CTYPE_SEQUENCE_OF << ASN1_CTYPE_SHIFT) | 0x1800000 | 0x100000,
+  0x0,
+  0xffff,
+  sizeof(ProtocolIE_Field_4),
+  (intptr_t)asn1_type_ProtocolIE_Field_4,
+  0,
+};
+
+const ASN1CType asn1_type_ProtocolIE_Container_5[] = {
+  (ASN1_CTYPE_SEQUENCE_OF << ASN1_CTYPE_SHIFT) | 0x1800000 | 0x100000,
+  0x0,
+  0xffff,
+  sizeof(ProtocolIE_Field_5),
+  (intptr_t)asn1_type_ProtocolIE_Field_5,
+  0,
+};
+
+static const ASN1CType asn1_type__local_2[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  (intptr_t)asn1_type_ProtocolIE_ID,
+};
+
+static const ASN1CType asn1_type__local_3[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  (intptr_t)asn1_type_Criticality,
+};
+
+static const ProtocolIE_ID asn1_value__local_7 = 7;
+
+static const Criticality asn1_value__local_8 = 0;
+
+static const Presence asn1_value__local_9 = 2;
+
+static const ProtocolIE_ID asn1_value__local_10 = 3;
+
+static const Criticality asn1_value__local_11 = 0;
+
+static const Presence asn1_value__local_12 = 2;
+
+static const ProtocolIE_ID asn1_value__local_13 = 5;
+
+static const Criticality asn1_value__local_14 = 1;
+
+static const Presence asn1_value__local_15 = 0;
+
+static const ProtocolIE_ID asn1_value__local_16 = 6;
+
+static const Criticality asn1_value__local_17 = 0;
+
+static const Presence asn1_value__local_18 = 2;
+
+static const ProtocolIE_ID asn1_value__local_19 = 4;
+
+static const Criticality asn1_value__local_20 = 0;
+
+static const Presence asn1_value__local_21 = 2;
+
+static const RUA_PROTOCOL_IES asn1_value__local_6[] = {
+{
+  (intptr_t)&asn1_value__local_7,
+  (intptr_t)&asn1_value__local_8,
+  (intptr_t)asn1_type_CN_DomainIndicator,
+  (intptr_t)&asn1_value__local_9,
+},
+{
+  (intptr_t)&asn1_value__local_10,
+  (intptr_t)&asn1_value__local_11,
+  (intptr_t)asn1_type_Context_ID,
+  (intptr_t)&asn1_value__local_12,
+},
+{
+  (intptr_t)&asn1_value__local_13,
+  (intptr_t)&asn1_value__local_14,
+  (intptr_t)asn1_type_IntraDomainNasNodeSelector,
+  (intptr_t)&asn1_value__local_15,
+},
+{
+  (intptr_t)&asn1_value__local_16,
+  (intptr_t)&asn1_value__local_17,
+  (intptr_t)asn1_type_Establishment_Cause,
+  (intptr_t)&asn1_value__local_18,
+},
+{
+  (intptr_t)&asn1_value__local_19,
+  (intptr_t)&asn1_value__local_20,
+  (intptr_t)asn1_type_RANAP_Message,
+  (intptr_t)&asn1_value__local_21,
+},
+};
+
+static const ASN1CType asn1_constraint__local_5[] = {
+  ASN1_CCONSTRAINT_TABLE,
+  (intptr_t)asn1_type_RUA_PROTOCOL_IES,
+  2,
+  (intptr_t)asn1_value__local_6,
+  5,
+  1,
+  0,
+  0x80000000,
+  0,
+};
+
+static const ASN1CType asn1_type__local_4[] = {
+  (ASN1_CTYPE_ANY << ASN1_CTYPE_SHIFT) | 0x200000 | 0x100002,
+  (intptr_t)asn1_constraint__local_5,
+};
+
+const ASN1CType asn1_type_ProtocolIE_Field_1[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x10,
+  3,
+  sizeof(ProtocolIE_Field_1),
+
+  offsetof(ProtocolIE_Field_1, id) | 0x0,
+  (intptr_t)asn1_type__local_2,
+  0,
+  (intptr_t)"id",
+
+  offsetof(ProtocolIE_Field_1, criticality) | 0x0,
+  (intptr_t)asn1_type__local_3,
+  0,
+  (intptr_t)"criticality",
+
+  offsetof(ProtocolIE_Field_1, value) | 0x0,
+  (intptr_t)asn1_type__local_4,
+  0,
+  (intptr_t)"value",
+
+};
+
+static const ASN1CType asn1_type__local_22[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  (intptr_t)asn1_type_ProtocolIE_ID,
+};
+
+static const ASN1CType asn1_type__local_23[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  (intptr_t)asn1_type_Criticality,
+};
+
+static const ProtocolIE_ID asn1_value__local_27 = 7;
+
+static const Criticality asn1_value__local_28 = 0;
+
+static const Presence asn1_value__local_29 = 2;
+
+static const ProtocolIE_ID asn1_value__local_30 = 3;
+
+static const Criticality asn1_value__local_31 = 0;
+
+static const Presence asn1_value__local_32 = 2;
+
+static const ProtocolIE_ID asn1_value__local_33 = 4;
+
+static const Criticality asn1_value__local_34 = 0;
+
+static const Presence asn1_value__local_35 = 2;
+
+static const RUA_PROTOCOL_IES asn1_value__local_26[] = {
+{
+  (intptr_t)&asn1_value__local_27,
+  (intptr_t)&asn1_value__local_28,
+  (intptr_t)asn1_type_CN_DomainIndicator,
+  (intptr_t)&asn1_value__local_29,
+},
+{
+  (intptr_t)&asn1_value__local_30,
+  (intptr_t)&asn1_value__local_31,
+  (intptr_t)asn1_type_Context_ID,
+  (intptr_t)&asn1_value__local_32,
+},
+{
+  (intptr_t)&asn1_value__local_33,
+  (intptr_t)&asn1_value__local_34,
+  (intptr_t)asn1_type_RANAP_Message,
+  (intptr_t)&asn1_value__local_35,
+},
+};
+
+static const ASN1CType asn1_constraint__local_25[] = {
+  ASN1_CCONSTRAINT_TABLE,
+  (intptr_t)asn1_type_RUA_PROTOCOL_IES,
+  2,
+  (intptr_t)asn1_value__local_26,
+  3,
+  1,
+  0,
+  0x80000000,
+  0,
+};
+
+static const ASN1CType asn1_type__local_24[] = {
+  (ASN1_CTYPE_ANY << ASN1_CTYPE_SHIFT) | 0x200000 | 0x100002,
+  (intptr_t)asn1_constraint__local_25,
+};
+
+const ASN1CType asn1_type_ProtocolIE_Field_2[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x10,
+  3,
+  sizeof(ProtocolIE_Field_2),
+
+  offsetof(ProtocolIE_Field_2, id) | 0x0,
+  (intptr_t)asn1_type__local_22,
+  0,
+  (intptr_t)"id",
+
+  offsetof(ProtocolIE_Field_2, criticality) | 0x0,
+  (intptr_t)asn1_type__local_23,
+  0,
+  (intptr_t)"criticality",
+
+  offsetof(ProtocolIE_Field_2, value) | 0x0,
+  (intptr_t)asn1_type__local_24,
+  0,
+  (intptr_t)"value",
+
+};
+
+static const ASN1CType asn1_type__local_36[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  (intptr_t)asn1_type_ProtocolIE_ID,
+};
+
+static const ASN1CType asn1_type__local_37[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  (intptr_t)asn1_type_Criticality,
+};
+
+static const ProtocolIE_ID asn1_value__local_41 = 7;
+
+static const Criticality asn1_value__local_42 = 0;
+
+static const Presence asn1_value__local_43 = 2;
+
+static const ProtocolIE_ID asn1_value__local_44 = 3;
+
+static const Criticality asn1_value__local_45 = 0;
+
+static const Presence asn1_value__local_46 = 2;
+
+static const ProtocolIE_ID asn1_value__local_47 = 1;
+
+static const Criticality asn1_value__local_48 = 0;
+
+static const Presence asn1_value__local_49 = 2;
+
+static const ProtocolIE_ID asn1_value__local_50 = 4;
+
+static const Criticality asn1_value__local_51 = 0;
+
+static const Presence asn1_value__local_52 = 1;
+
+static const RUA_PROTOCOL_IES asn1_value__local_40[] = {
+{
+  (intptr_t)&asn1_value__local_41,
+  (intptr_t)&asn1_value__local_42,
+  (intptr_t)asn1_type_CN_DomainIndicator,
+  (intptr_t)&asn1_value__local_43,
+},
+{
+  (intptr_t)&asn1_value__local_44,
+  (intptr_t)&asn1_value__local_45,
+  (intptr_t)asn1_type_Context_ID,
+  (intptr_t)&asn1_value__local_46,
+},
+{
+  (intptr_t)&asn1_value__local_47,
+  (intptr_t)&asn1_value__local_48,
+  (intptr_t)asn1_type_Cause,
+  (intptr_t)&asn1_value__local_49,
+},
+{
+  (intptr_t)&asn1_value__local_50,
+  (intptr_t)&asn1_value__local_51,
+  (intptr_t)asn1_type_RANAP_Message,
+  (intptr_t)&asn1_value__local_52,
+},
+};
+
+static const ASN1CType asn1_constraint__local_39[] = {
+  ASN1_CCONSTRAINT_TABLE,
+  (intptr_t)asn1_type_RUA_PROTOCOL_IES,
+  2,
+  (intptr_t)asn1_value__local_40,
+  4,
+  1,
+  0,
+  0x80000000,
+  0,
+};
+
+static const ASN1CType asn1_type__local_38[] = {
+  (ASN1_CTYPE_ANY << ASN1_CTYPE_SHIFT) | 0x200000 | 0x100002,
+  (intptr_t)asn1_constraint__local_39,
+};
+
+const ASN1CType asn1_type_ProtocolIE_Field_3[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x10,
+  3,
+  sizeof(ProtocolIE_Field_3),
+
+  offsetof(ProtocolIE_Field_3, id) | 0x0,
+  (intptr_t)asn1_type__local_36,
+  0,
+  (intptr_t)"id",
+
+  offsetof(ProtocolIE_Field_3, criticality) | 0x0,
+  (intptr_t)asn1_type__local_37,
+  0,
+  (intptr_t)"criticality",
+
+  offsetof(ProtocolIE_Field_3, value) | 0x0,
+  (intptr_t)asn1_type__local_38,
+  0,
+  (intptr_t)"value",
+
+};
+
+static const ASN1CType asn1_type__local_53[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  (intptr_t)asn1_type_ProtocolIE_ID,
+};
+
+static const ASN1CType asn1_type__local_54[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  (intptr_t)asn1_type_Criticality,
+};
+
+static const ProtocolIE_ID asn1_value__local_58 = 4;
+
+static const Criticality asn1_value__local_59 = 0;
+
+static const Presence asn1_value__local_60 = 2;
+
+static const RUA_PROTOCOL_IES asn1_value__local_57[] = {
+{
+  (intptr_t)&asn1_value__local_58,
+  (intptr_t)&asn1_value__local_59,
+  (intptr_t)asn1_type_RANAP_Message,
+  (intptr_t)&asn1_value__local_60,
+},
+};
+
+static const ASN1CType asn1_constraint__local_56[] = {
+  ASN1_CCONSTRAINT_TABLE,
+  (intptr_t)asn1_type_RUA_PROTOCOL_IES,
+  2,
+  (intptr_t)asn1_value__local_57,
+  1,
+  1,
+  0,
+  0x80000000,
+  0,
+};
+
+static const ASN1CType asn1_type__local_55[] = {
+  (ASN1_CTYPE_ANY << ASN1_CTYPE_SHIFT) | 0x200000 | 0x100002,
+  (intptr_t)asn1_constraint__local_56,
+};
+
+const ASN1CType asn1_type_ProtocolIE_Field_4[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x10,
+  3,
+  sizeof(ProtocolIE_Field_4),
+
+  offsetof(ProtocolIE_Field_4, id) | 0x0,
+  (intptr_t)asn1_type__local_53,
+  0,
+  (intptr_t)"id",
+
+  offsetof(ProtocolIE_Field_4, criticality) | 0x0,
+  (intptr_t)asn1_type__local_54,
+  0,
+  (intptr_t)"criticality",
+
+  offsetof(ProtocolIE_Field_4, value) | 0x0,
+  (intptr_t)asn1_type__local_55,
+  0,
+  (intptr_t)"value",
+
+};
+
+static const ASN1CType asn1_type__local_61[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  (intptr_t)asn1_type_ProtocolIE_ID,
+};
+
+static const ASN1CType asn1_type__local_62[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  (intptr_t)asn1_type_Criticality,
+};
+
+static const ProtocolIE_ID asn1_value__local_66 = 1;
+
+static const Criticality asn1_value__local_67 = 1;
+
+static const Presence asn1_value__local_68 = 2;
+
+static const ProtocolIE_ID asn1_value__local_69 = 2;
+
+static const Criticality asn1_value__local_70 = 1;
+
+static const Presence asn1_value__local_71 = 0;
+
+static const RUA_PROTOCOL_IES asn1_value__local_65[] = {
+{
+  (intptr_t)&asn1_value__local_66,
+  (intptr_t)&asn1_value__local_67,
+  (intptr_t)asn1_type_Cause,
+  (intptr_t)&asn1_value__local_68,
+},
+{
+  (intptr_t)&asn1_value__local_69,
+  (intptr_t)&asn1_value__local_70,
+  (intptr_t)asn1_type_CriticalityDiagnostics,
+  (intptr_t)&asn1_value__local_71,
+},
+};
+
+static const ASN1CType asn1_constraint__local_64[] = {
+  ASN1_CCONSTRAINT_TABLE,
+  (intptr_t)asn1_type_RUA_PROTOCOL_IES,
+  2,
+  (intptr_t)asn1_value__local_65,
+  2,
+  1,
+  0,
+  0x80000000,
+  0,
+};
+
+static const ASN1CType asn1_type__local_63[] = {
+  (ASN1_CTYPE_ANY << ASN1_CTYPE_SHIFT) | 0x200000 | 0x100002,
+  (intptr_t)asn1_constraint__local_64,
+};
+
+const ASN1CType asn1_type_ProtocolIE_Field_5[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x10,
+  3,
+  sizeof(ProtocolIE_Field_5),
+
+  offsetof(ProtocolIE_Field_5, id) | 0x0,
+  (intptr_t)asn1_type__local_61,
+  0,
+  (intptr_t)"id",
+
+  offsetof(ProtocolIE_Field_5, criticality) | 0x0,
+  (intptr_t)asn1_type__local_62,
+  0,
+  (intptr_t)"criticality",
+
+  offsetof(ProtocolIE_Field_5, value) | 0x0,
+  (intptr_t)asn1_type__local_63,
+  0,
+  (intptr_t)"value",
+
+};
+
+const ASN1CType asn1_type_ProtocolExtensionContainer_1[] = {
+  (ASN1_CTYPE_SEQUENCE_OF << ASN1_CTYPE_SHIFT) | 0x1800000 | 0x100004,
+  0x1,
+  0xffff,
+  sizeof(ProtocolExtensionField_1),
+  (intptr_t)asn1_type_ProtocolExtensionField_1,
+  0,
+};
+
+const ASN1CType asn1_type_ProtocolExtensionContainer_2[] = {
+  (ASN1_CTYPE_SEQUENCE_OF << ASN1_CTYPE_SHIFT) | 0x1800000 | 0x100003,
+  0x1,
+  0xffff,
+  sizeof(ProtocolExtensionField_2),
+  (intptr_t)asn1_type_ProtocolExtensionField_2,
+  0,
+};
+
+const ASN1CType asn1_type_ProtocolExtensionContainer_3[] = {
+  (ASN1_CTYPE_SEQUENCE_OF << ASN1_CTYPE_SHIFT) | 0x1800000 | 0x100001,
+  0x1,
+  0xffff,
+  sizeof(ProtocolExtensionField_3),
+  (intptr_t)asn1_type_ProtocolExtensionField_3,
+  0,
+};
+
+const ASN1CType asn1_type_ProtocolExtensionContainer_4[] = {
+  (ASN1_CTYPE_SEQUENCE_OF << ASN1_CTYPE_SHIFT) | 0x1800000 | 0x100001,
+  0x1,
+  0xffff,
+  sizeof(ProtocolExtensionField_4),
+  (intptr_t)asn1_type_ProtocolExtensionField_4,
+  0,
+};
+
+const ASN1CType asn1_type_ProtocolExtensionContainer_5[] = {
+  (ASN1_CTYPE_SEQUENCE_OF << ASN1_CTYPE_SHIFT) | 0x1800000 | 0x100001,
+  0x1,
+  0xffff,
+  sizeof(ProtocolExtensionField_5),
+  (intptr_t)asn1_type_ProtocolExtensionField_5,
+  0,
+};
+
+const ASN1CType asn1_type_ProtocolExtensionContainer_6[] = {
+  (ASN1_CTYPE_SEQUENCE_OF << ASN1_CTYPE_SHIFT) | 0x1800000 | 0x100001,
+  0x1,
+  0xffff,
+  sizeof(ProtocolExtensionField_6),
+  (intptr_t)asn1_type_ProtocolExtensionField_6,
+  0,
+};
+
+const ASN1CType asn1_type_ProtocolExtensionContainer_7[] = {
+  (ASN1_CTYPE_SEQUENCE_OF << ASN1_CTYPE_SHIFT) | 0x1800000 | 0x100001,
+  0x1,
+  0xffff,
+  sizeof(ProtocolExtensionField_7),
+  (intptr_t)asn1_type_ProtocolExtensionField_7,
+  0,
+};
+
+static const ASN1CType asn1_type__local_72[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  (intptr_t)asn1_type_ProtocolIE_ID,
+};
+
+static const ASN1CType asn1_type__local_73[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  (intptr_t)asn1_type_Criticality,
+};
+
+static const ASN1CType asn1_constraint__local_75[] = {
+  ASN1_CCONSTRAINT_TABLE,
+  (intptr_t)asn1_type_RUA_PROTOCOL_EXTENSION,
+  2,
+  0,
+  0,
+  1,
+  0,
+  0x80000000,
+  0,
+};
+
+static const ASN1CType asn1_type__local_74[] = {
+  (ASN1_CTYPE_ANY << ASN1_CTYPE_SHIFT) | 0x200000 | 0x100002,
+  (intptr_t)asn1_constraint__local_75,
+};
+
+const ASN1CType asn1_type_ProtocolExtensionField_1[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x10,
+  3,
+  sizeof(ProtocolExtensionField_1),
+
+  offsetof(ProtocolExtensionField_1, id) | 0x0,
+  (intptr_t)asn1_type__local_72,
+  0,
+  (intptr_t)"id",
+
+  offsetof(ProtocolExtensionField_1, criticality) | 0x0,
+  (intptr_t)asn1_type__local_73,
+  0,
+  (intptr_t)"criticality",
+
+  offsetof(ProtocolExtensionField_1, extensionValue) | 0x0,
+  (intptr_t)asn1_type__local_74,
+  0,
+  (intptr_t)"extensionValue",
+
+};
+
+static const ASN1CType asn1_type__local_77[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  (intptr_t)asn1_type_ProtocolIE_ID,
+};
+
+static const ASN1CType asn1_type__local_78[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  (intptr_t)asn1_type_Criticality,
+};
+
+static const ASN1CType asn1_constraint__local_80[] = {
+  ASN1_CCONSTRAINT_TABLE,
+  (intptr_t)asn1_type_RUA_PROTOCOL_EXTENSION,
+  2,
+  0,
+  0,
+  1,
+  0,
+  0x80000000,
+  0,
+};
+
+static const ASN1CType asn1_type__local_79[] = {
+  (ASN1_CTYPE_ANY << ASN1_CTYPE_SHIFT) | 0x200000 | 0x100002,
+  (intptr_t)asn1_constraint__local_80,
+};
+
+const ASN1CType asn1_type_ProtocolExtensionField_2[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x10,
+  3,
+  sizeof(ProtocolExtensionField_2),
+
+  offsetof(ProtocolExtensionField_2, id) | 0x0,
+  (intptr_t)asn1_type__local_77,
+  0,
+  (intptr_t)"id",
+
+  offsetof(ProtocolExtensionField_2, criticality) | 0x0,
+  (intptr_t)asn1_type__local_78,
+  0,
+  (intptr_t)"criticality",
+
+  offsetof(ProtocolExtensionField_2, extensionValue) | 0x0,
+  (intptr_t)asn1_type__local_79,
+  0,
+  (intptr_t)"extensionValue",
+
+};
+
+static const ASN1CType asn1_type__local_82[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  (intptr_t)asn1_type_ProtocolIE_ID,
+};
+
+static const ASN1CType asn1_type__local_83[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  (intptr_t)asn1_type_Criticality,
+};
+
+static const ProtocolIE_ID asn1_value__local_87 = 9;
+
+static const Criticality asn1_value__local_88 = 1;
+
+static const Presence asn1_value__local_89 = 0;
+
+static const RUA_PROTOCOL_EXTENSION asn1_value__local_86[] = {
+{
+  (intptr_t)&asn1_value__local_87,
+  (intptr_t)&asn1_value__local_88,
+  (intptr_t)asn1_type_CSGMembershipStatus,
+  (intptr_t)&asn1_value__local_89,
+},
+};
+
+static const ASN1CType asn1_constraint__local_85[] = {
+  ASN1_CCONSTRAINT_TABLE,
+  (intptr_t)asn1_type_RUA_PROTOCOL_EXTENSION,
+  2,
+  (intptr_t)asn1_value__local_86,
+  1,
+  1,
+  0,
+  0x80000000,
+  0,
+};
+
+static const ASN1CType asn1_type__local_84[] = {
+  (ASN1_CTYPE_ANY << ASN1_CTYPE_SHIFT) | 0x200000 | 0x100002,
+  (intptr_t)asn1_constraint__local_85,
+};
+
+const ASN1CType asn1_type_ProtocolExtensionField_3[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x10,
+  3,
+  sizeof(ProtocolExtensionField_3),
+
+  offsetof(ProtocolExtensionField_3, id) | 0x0,
+  (intptr_t)asn1_type__local_82,
+  0,
+  (intptr_t)"id",
+
+  offsetof(ProtocolExtensionField_3, criticality) | 0x0,
+  (intptr_t)asn1_type__local_83,
+  0,
+  (intptr_t)"criticality",
+
+  offsetof(ProtocolExtensionField_3, extensionValue) | 0x0,
+  (intptr_t)asn1_type__local_84,
+  0,
+  (intptr_t)"extensionValue",
+
+};
+
+static const ASN1CType asn1_type__local_90[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  (intptr_t)asn1_type_ProtocolIE_ID,
+};
+
+static const ASN1CType asn1_type__local_91[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  (intptr_t)asn1_type_Criticality,
+};
+
+static const ASN1CType asn1_constraint__local_93[] = {
+  ASN1_CCONSTRAINT_TABLE,
+  (intptr_t)asn1_type_RUA_PROTOCOL_EXTENSION,
+  2,
+  0,
+  0,
+  1,
+  0,
+  0x80000000,
+  0,
+};
+
+static const ASN1CType asn1_type__local_92[] = {
+  (ASN1_CTYPE_ANY << ASN1_CTYPE_SHIFT) | 0x200000 | 0x100002,
+  (intptr_t)asn1_constraint__local_93,
+};
+
+const ASN1CType asn1_type_ProtocolExtensionField_4[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x10,
+  3,
+  sizeof(ProtocolExtensionField_4),
+
+  offsetof(ProtocolExtensionField_4, id) | 0x0,
+  (intptr_t)asn1_type__local_90,
+  0,
+  (intptr_t)"id",
+
+  offsetof(ProtocolExtensionField_4, criticality) | 0x0,
+  (intptr_t)asn1_type__local_91,
+  0,
+  (intptr_t)"criticality",
+
+  offsetof(ProtocolExtensionField_4, extensionValue) | 0x0,
+  (intptr_t)asn1_type__local_92,
+  0,
+  (intptr_t)"extensionValue",
+
+};
+
+static const ASN1CType asn1_type__local_95[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  (intptr_t)asn1_type_ProtocolIE_ID,
+};
+
+static const ASN1CType asn1_type__local_96[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  (intptr_t)asn1_type_Criticality,
+};
+
+static const ASN1CType asn1_constraint__local_98[] = {
+  ASN1_CCONSTRAINT_TABLE,
+  (intptr_t)asn1_type_RUA_PROTOCOL_EXTENSION,
+  2,
+  0,
+  0,
+  1,
+  0,
+  0x80000000,
+  0,
+};
+
+static const ASN1CType asn1_type__local_97[] = {
+  (ASN1_CTYPE_ANY << ASN1_CTYPE_SHIFT) | 0x200000 | 0x100002,
+  (intptr_t)asn1_constraint__local_98,
+};
+
+const ASN1CType asn1_type_ProtocolExtensionField_5[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x10,
+  3,
+  sizeof(ProtocolExtensionField_5),
+
+  offsetof(ProtocolExtensionField_5, id) | 0x0,
+  (intptr_t)asn1_type__local_95,
+  0,
+  (intptr_t)"id",
+
+  offsetof(ProtocolExtensionField_5, criticality) | 0x0,
+  (intptr_t)asn1_type__local_96,
+  0,
+  (intptr_t)"criticality",
+
+  offsetof(ProtocolExtensionField_5, extensionValue) | 0x0,
+  (intptr_t)asn1_type__local_97,
+  0,
+  (intptr_t)"extensionValue",
+
+};
+
+static const ASN1CType asn1_type__local_100[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  (intptr_t)asn1_type_ProtocolIE_ID,
+};
+
+static const ASN1CType asn1_type__local_101[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  (intptr_t)asn1_type_Criticality,
+};
+
+static const ASN1CType asn1_constraint__local_103[] = {
+  ASN1_CCONSTRAINT_TABLE,
+  (intptr_t)asn1_type_RUA_PROTOCOL_EXTENSION,
+  2,
+  0,
+  0,
+  1,
+  0,
+  0x80000000,
+  0,
+};
+
+static const ASN1CType asn1_type__local_102[] = {
+  (ASN1_CTYPE_ANY << ASN1_CTYPE_SHIFT) | 0x200000 | 0x100002,
+  (intptr_t)asn1_constraint__local_103,
+};
+
+const ASN1CType asn1_type_ProtocolExtensionField_6[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x10,
+  3,
+  sizeof(ProtocolExtensionField_6),
+
+  offsetof(ProtocolExtensionField_6, id) | 0x0,
+  (intptr_t)asn1_type__local_100,
+  0,
+  (intptr_t)"id",
+
+  offsetof(ProtocolExtensionField_6, criticality) | 0x0,
+  (intptr_t)asn1_type__local_101,
+  0,
+  (intptr_t)"criticality",
+
+  offsetof(ProtocolExtensionField_6, extensionValue) | 0x0,
+  (intptr_t)asn1_type__local_102,
+  0,
+  (intptr_t)"extensionValue",
+
+};
+
+static const ASN1CType asn1_type__local_105[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  (intptr_t)asn1_type_ProtocolIE_ID,
+};
+
+static const ASN1CType asn1_type__local_106[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  (intptr_t)asn1_type_Criticality,
+};
+
+static const ASN1CType asn1_constraint__local_108[] = {
+  ASN1_CCONSTRAINT_TABLE,
+  (intptr_t)asn1_type_RUA_PROTOCOL_EXTENSION,
+  2,
+  0,
+  0,
+  1,
+  0,
+  0x80000000,
+  0,
+};
+
+static const ASN1CType asn1_type__local_107[] = {
+  (ASN1_CTYPE_ANY << ASN1_CTYPE_SHIFT) | 0x200000 | 0x100002,
+  (intptr_t)asn1_constraint__local_108,
+};
+
+const ASN1CType asn1_type_ProtocolExtensionField_7[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x10,
+  3,
+  sizeof(ProtocolExtensionField_7),
+
+  offsetof(ProtocolExtensionField_7, id) | 0x0,
+  (intptr_t)asn1_type__local_105,
+  0,
+  (intptr_t)"id",
+
+  offsetof(ProtocolExtensionField_7, criticality) | 0x0,
+  (intptr_t)asn1_type__local_106,
+  0,
+  (intptr_t)"criticality",
+
+  offsetof(ProtocolExtensionField_7, extensionValue) | 0x0,
+  (intptr_t)asn1_type__local_107,
+  0,
+  (intptr_t)"extensionValue",
+
+};
+
+const ASN1CType asn1_type_PrivateIE_Container_1[] = {
+  (ASN1_CTYPE_SEQUENCE_OF << ASN1_CTYPE_SHIFT) | 0x1800000 | 0x100000,
+  0x1,
+  0xffff,
+  sizeof(PrivateIE_Field_1),
+  (intptr_t)asn1_type_PrivateIE_Field_1,
+  0,
+};
+
+static const ASN1CType asn1_type__local_110[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x2000000 | 0x100000,
+  (intptr_t)asn1_type_PrivateIE_ID,
+};
+
+static const ASN1CType asn1_type__local_111[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  (intptr_t)asn1_type_Criticality,
+};
+
+static const ASN1CType asn1_constraint__local_113[] = {
+  ASN1_CCONSTRAINT_TABLE,
+  (intptr_t)asn1_type_RUA_PRIVATE_IES,
+  2,
+  0,
+  0,
+  1,
+  0,
+  0x80000000,
+  0,
+};
+
+static const ASN1CType asn1_type__local_112[] = {
+  (ASN1_CTYPE_ANY << ASN1_CTYPE_SHIFT) | 0x200000 | 0x100002,
+  (intptr_t)asn1_constraint__local_113,
+};
+
+const ASN1CType asn1_type_PrivateIE_Field_1[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x10,
+  3,
+  sizeof(PrivateIE_Field_1),
+
+  offsetof(PrivateIE_Field_1, id) | 0x0,
+  (intptr_t)asn1_type__local_110,
+  0,
+  (intptr_t)"id",
+
+  offsetof(PrivateIE_Field_1, criticality) | 0x0,
+  (intptr_t)asn1_type__local_111,
+  0,
+  (intptr_t)"criticality",
+
+  offsetof(PrivateIE_Field_1, value) | 0x0,
+  (intptr_t)asn1_type__local_112,
+  0,
+  (intptr_t)"value",
+
+};
+
+const ASN1CType asn1_type_CN_DomainIndicator[] = {
+  (ASN1_CTYPE_ENUMERATED << ASN1_CTYPE_SHIFT) | 0x4000000 | 0xa,
+  2,
+  (intptr_t)"cs-domain",
+  (intptr_t)"ps-domain",
+  (intptr_t)"CN-DomainIndicator",
+};
+
+const ASN1CType asn1_type_CSGMembershipStatus[] = {
+  (ASN1_CTYPE_ENUMERATED << ASN1_CTYPE_SHIFT) | 0x6000000 | 0xa,
+  2,
+  0,
+  (intptr_t)"member",
+  (intptr_t)"non-member",
+  (intptr_t)"CSGMembershipStatus",
+};
+
+const ASN1CType asn1_type_Establishment_Cause[] = {
+  (ASN1_CTYPE_ENUMERATED << ASN1_CTYPE_SHIFT) | 0x6000000 | 0xa,
+  2,
+  0,
+  (intptr_t)"emergency-call",
+  (intptr_t)"normal-call",
+  (intptr_t)"Establishment-Cause",
+};
+
+const ASN1CType asn1_type_Context_ID[] = {
+  (ASN1_CTYPE_BIT_STRING << ASN1_CTYPE_SHIFT) | 0x5800000 | 0x3,
+  0x18,
+  0x18,
+  (intptr_t)"Context-ID",
+};
+
+const ASN1CType asn1_type_IntraDomainNasNodeSelector[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x4000000 | 0x10,
+  1,
+  sizeof(IntraDomainNasNodeSelector),
+
+  offsetof(IntraDomainNasNodeSelector, version) | 0x0,
+  (intptr_t)asn1_type_IntraDomainNasNodeSelector_4,
+  0,
+  (intptr_t)"version",
+
+  (intptr_t)"IntraDomainNasNodeSelector",
+};
+
+const ASN1CType asn1_type_IntraDomainNasNodeSelector_1[] = {
+  (ASN1_CTYPE_CHOICE << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  2,
+  sizeof(IntraDomainNasNodeSelector_1),
+  offsetof(IntraDomainNasNodeSelector_1, choice),
+  offsetof(IntraDomainNasNodeSelector_1, u),
+  (intptr_t)asn1_type_Gsm_map_IDNNS,
+  (intptr_t)"gsm-Map-IDNNS",
+  (intptr_t)asn1_type_Ansi_41_IDNNS,
+  (intptr_t)"ansi-41-IDNNS",
+};
+
+const ASN1CType asn1_type_IntraDomainNasNodeSelector_2[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  1,
+  sizeof(IntraDomainNasNodeSelector_2),
+
+  offsetof(IntraDomainNasNodeSelector_2, cn_Type) | 0x0,
+  (intptr_t)asn1_type_IntraDomainNasNodeSelector_1,
+  0,
+  (intptr_t)"cn-Type",
+
+};
+
+static const ASN1CType asn1_type__local_115[] = {
+  (ASN1_CTYPE_BIT_STRING << ASN1_CTYPE_SHIFT) | 0x1800000 | 0x100000,
+  0xf,
+  0xf,
+};
+
+const ASN1CType asn1_type_IntraDomainNasNodeSelector_3[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  1,
+  sizeof(IntraDomainNasNodeSelector_3),
+
+  offsetof(IntraDomainNasNodeSelector_3, futurecoding) | 0x0,
+  (intptr_t)asn1_type__local_115,
+  0,
+  (intptr_t)"futurecoding",
+
+};
+
+const ASN1CType asn1_type_IntraDomainNasNodeSelector_4[] = {
+  (ASN1_CTYPE_CHOICE << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  2,
+  sizeof(IntraDomainNasNodeSelector_4),
+  offsetof(IntraDomainNasNodeSelector_4, choice),
+  offsetof(IntraDomainNasNodeSelector_4, u),
+  (intptr_t)asn1_type_IntraDomainNasNodeSelector_2,
+  (intptr_t)"release99",
+  (intptr_t)asn1_type_IntraDomainNasNodeSelector_3,
+  (intptr_t)"later",
+};
+
+static const ASN1CType asn1_type__local_116[] = {
+  (ASN1_CTYPE_BOOLEAN << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+};
+
+const ASN1CType asn1_type_Gsm_map_IDNNS[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x4000000 | 0x100000,
+  2,
+  sizeof(Gsm_map_IDNNS),
+
+  offsetof(Gsm_map_IDNNS, routingbasis) | 0x0,
+  (intptr_t)asn1_type_Gsm_map_IDNNS_9,
+  0,
+  (intptr_t)"routingbasis",
+
+  offsetof(Gsm_map_IDNNS, dummy) | 0x0,
+  (intptr_t)asn1_type__local_116,
+  0,
+  (intptr_t)"dummy",
+
+  (intptr_t)"Gsm-map-IDNNS",
+};
+
+const ASN1CType asn1_type_Gsm_map_IDNNS_1[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  1,
+  sizeof(Gsm_map_IDNNS_1),
+
+  offsetof(Gsm_map_IDNNS_1, routingparameter) | 0x0,
+  (intptr_t)asn1_type_RoutingParameter,
+  0,
+  (intptr_t)"routingparameter",
+
+};
+
+const ASN1CType asn1_type_Gsm_map_IDNNS_2[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  1,
+  sizeof(Gsm_map_IDNNS_2),
+
+  offsetof(Gsm_map_IDNNS_2, routingparameter) | 0x0,
+  (intptr_t)asn1_type_RoutingParameter,
+  0,
+  (intptr_t)"routingparameter",
+
+};
+
+const ASN1CType asn1_type_Gsm_map_IDNNS_3[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x100002,
+  1,
+  sizeof(Gsm_map_IDNNS_3),
+
+  offsetof(Gsm_map_IDNNS_3, routingparameter) | 0x0,
+  (intptr_t)asn1_type_RoutingParameter,
+  0,
+  (intptr_t)"routingparameter",
+
+};
+
+const ASN1CType asn1_type_Gsm_map_IDNNS_4[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x100003,
+  1,
+  sizeof(Gsm_map_IDNNS_4),
+
+  offsetof(Gsm_map_IDNNS_4, routingparameter) | 0x0,
+  (intptr_t)asn1_type_RoutingParameter,
+  0,
+  (intptr_t)"routingparameter",
+
+};
+
+const ASN1CType asn1_type_Gsm_map_IDNNS_5[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x100004,
+  1,
+  sizeof(Gsm_map_IDNNS_5),
+
+  offsetof(Gsm_map_IDNNS_5, routingparameter) | 0x0,
+  (intptr_t)asn1_type_RoutingParameter,
+  0,
+  (intptr_t)"routingparameter",
+
+};
+
+const ASN1CType asn1_type_Gsm_map_IDNNS_6[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x100005,
+  1,
+  sizeof(Gsm_map_IDNNS_6),
+
+  offsetof(Gsm_map_IDNNS_6, routingparameter) | 0x0,
+  (intptr_t)asn1_type_RoutingParameter,
+  0,
+  (intptr_t)"routingparameter",
+
+};
+
+const ASN1CType asn1_type_Gsm_map_IDNNS_7[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x100006,
+  1,
+  sizeof(Gsm_map_IDNNS_7),
+
+  offsetof(Gsm_map_IDNNS_7, routingparameter) | 0x0,
+  (intptr_t)asn1_type_RoutingParameter,
+  0,
+  (intptr_t)"routingparameter",
+
+};
+
+const ASN1CType asn1_type_Gsm_map_IDNNS_8[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x0 | 0x100007,
+  1,
+  sizeof(Gsm_map_IDNNS_8),
+
+  offsetof(Gsm_map_IDNNS_8, routingparameter) | 0x0,
+  (intptr_t)asn1_type_RoutingParameter,
+  0,
+  (intptr_t)"routingparameter",
+
+};
+
+const ASN1CType asn1_type_Gsm_map_IDNNS_9[] = {
+  (ASN1_CTYPE_CHOICE << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  8,
+  sizeof(Gsm_map_IDNNS_9),
+  offsetof(Gsm_map_IDNNS_9, choice),
+  offsetof(Gsm_map_IDNNS_9, u),
+  (intptr_t)asn1_type_Gsm_map_IDNNS_1,
+  (intptr_t)"localPTMSI",
+  (intptr_t)asn1_type_Gsm_map_IDNNS_2,
+  (intptr_t)"tMSIofsamePLMN",
+  (intptr_t)asn1_type_Gsm_map_IDNNS_3,
+  (intptr_t)"tMSIofdifferentPLMN",
+  (intptr_t)asn1_type_Gsm_map_IDNNS_4,
+  (intptr_t)"iMSIresponsetopaging",
+  (intptr_t)asn1_type_Gsm_map_IDNNS_5,
+  (intptr_t)"iMSIcauseUEinitiatedEvent",
+  (intptr_t)asn1_type_Gsm_map_IDNNS_6,
+  (intptr_t)"iMEI",
+  (intptr_t)asn1_type_Gsm_map_IDNNS_7,
+  (intptr_t)"spare2",
+  (intptr_t)asn1_type_Gsm_map_IDNNS_8,
+  (intptr_t)"spare1",
+};
+
+const ASN1CType asn1_type_Ansi_41_IDNNS[] = {
+  (ASN1_CTYPE_BIT_STRING << ASN1_CTYPE_SHIFT) | 0x5800000 | 0x100001,
+  0xe,
+  0xe,
+  (intptr_t)"Ansi-41-IDNNS",
+};
+
+const ASN1CType asn1_type_RANAP_Message[] = {
+  (ASN1_CTYPE_OCTET_STRING << ASN1_CTYPE_SHIFT) | 0x5000000 | 0x4,
+  0x0,
+  (intptr_t)"RANAP-Message",
+};
+
+const ASN1CType asn1_type_RoutingParameter[] = {
+  (ASN1_CTYPE_BIT_STRING << ASN1_CTYPE_SHIFT) | 0x5800000 | 0x100000,
+  0xa,
+  0xa,
+  (intptr_t)"RoutingParameter",
+};
+
+const ASN1CType asn1_type_Cause[] = {
+  (ASN1_CTYPE_CHOICE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x0,
+  4,
+  0,
+  sizeof(Cause),
+  offsetof(Cause, choice),
+  offsetof(Cause, u),
+  (intptr_t)asn1_type_CauseRadioNetwork,
+  (intptr_t)"radioNetwork",
+  (intptr_t)asn1_type_CauseTransport,
+  (intptr_t)"transport",
+  (intptr_t)asn1_type_CauseProtocol,
+  (intptr_t)"protocol",
+  (intptr_t)asn1_type_CauseMisc,
+  (intptr_t)"misc",
+  (intptr_t)"Cause",
+};
+
+const ASN1CType asn1_type_CauseRadioNetwork[] = {
+  (ASN1_CTYPE_ENUMERATED << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x100000,
+  4,
+  0,
+  (intptr_t)"normal",
+  (intptr_t)"connect-failed",
+  (intptr_t)"network-release",
+  (intptr_t)"unspecified",
+  (intptr_t)"CauseRadioNetwork",
+};
+
+const ASN1CType asn1_type_CauseTransport[] = {
+  (ASN1_CTYPE_ENUMERATED << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x100001,
+  2,
+  0,
+  (intptr_t)"transport-resource-unavailable",
+  (intptr_t)"unspecified",
+  (intptr_t)"CauseTransport",
+};
+
+const ASN1CType asn1_type_CauseProtocol[] = {
+  (ASN1_CTYPE_ENUMERATED << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x100002,
+  7,
+  0,
+  (intptr_t)"transfer-syntax-error",
+  (intptr_t)"abstract-syntax-error-reject",
+  (intptr_t)"abstract-syntax-error-ignore-and-notify",
+  (intptr_t)"message-not-compatible-with-receiver-state",
+  (intptr_t)"semantic-error",
+  (intptr_t)"unspecified",
+  (intptr_t)"abstract-syntax-error-falsely-constructed-message",
+  (intptr_t)"CauseProtocol",
+};
+
+const ASN1CType asn1_type_CauseMisc[] = {
+  (ASN1_CTYPE_ENUMERATED << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x100003,
+  4,
+  0,
+  (intptr_t)"processing-overload",
+  (intptr_t)"hardware-failure",
+  (intptr_t)"o-and-m-intervention",
+  (intptr_t)"unspecified",
+  (intptr_t)"CauseMisc",
+};
+
+static const ASN1CType asn1_type__local_117[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  (intptr_t)asn1_type_ProcedureCode,
+};
+
+static const ASN1CType asn1_type__local_118[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100002,
+  (intptr_t)asn1_type_Criticality,
+};
+
+const ASN1CType asn1_type_CriticalityDiagnostics[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x10,
+  5,
+  sizeof(CriticalityDiagnostics),
+
+  offsetof(CriticalityDiagnostics, procedureCode) | 0x8000000,
+  (intptr_t)asn1_type__local_117,
+  offsetof(CriticalityDiagnostics, procedureCode_option),
+  (intptr_t)"procedureCode",
+
+  offsetof(CriticalityDiagnostics, triggeringMessage) | 0x8000000,
+  (intptr_t)asn1_type_TriggeringMessage,
+  offsetof(CriticalityDiagnostics, triggeringMessage_option),
+  (intptr_t)"triggeringMessage",
+
+  offsetof(CriticalityDiagnostics, procedureCriticality) | 0x8000000,
+  (intptr_t)asn1_type__local_118,
+  offsetof(CriticalityDiagnostics, procedureCriticality_option),
+  (intptr_t)"procedureCriticality",
+
+  offsetof(CriticalityDiagnostics, iEsCriticalityDiagnostics) | 0x8000000,
+  (intptr_t)asn1_type_CriticalityDiagnostics_IE_List,
+  offsetof(CriticalityDiagnostics, iEsCriticalityDiagnostics_option),
+  (intptr_t)"iEsCriticalityDiagnostics",
+
+  offsetof(CriticalityDiagnostics, iE_Extensions) | 0x8000000,
+  (intptr_t)asn1_type_ProtocolExtensionContainer_1,
+  offsetof(CriticalityDiagnostics, iE_Extensions_option),
+  (intptr_t)"iE-Extensions",
+
+  (intptr_t)"CriticalityDiagnostics",
+};
+
+const ASN1CType asn1_type_CriticalityDiagnostics_IE_List[] = {
+  (ASN1_CTYPE_SEQUENCE_OF << ASN1_CTYPE_SHIFT) | 0x5800000 | 0x100003,
+  0x1,
+  0x100,
+  sizeof(CriticalityDiagnostics_IE_List_1),
+  (intptr_t)asn1_type_CriticalityDiagnostics_IE_List_1,
+  0,
+  (intptr_t)"CriticalityDiagnostics-IE-List",
+};
+
+static const ASN1CType asn1_type__local_119[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  (intptr_t)asn1_type_Criticality,
+};
+
+static const ASN1CType asn1_type__local_120[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  (intptr_t)asn1_type_ProtocolIE_ID,
+};
+
+const ASN1CType asn1_type_CriticalityDiagnostics_IE_List_1[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x2000000 | 0x10,
+  4,
+  sizeof(CriticalityDiagnostics_IE_List_1),
+
+  offsetof(CriticalityDiagnostics_IE_List_1, iECriticality) | 0x0,
+  (intptr_t)asn1_type__local_119,
+  0,
+  (intptr_t)"iECriticality",
+
+  offsetof(CriticalityDiagnostics_IE_List_1, iE_ID) | 0x0,
+  (intptr_t)asn1_type__local_120,
+  0,
+  (intptr_t)"iE-ID",
+
+  offsetof(CriticalityDiagnostics_IE_List_1, typeOfError) | 0x0,
+  (intptr_t)asn1_type_TypeOfError,
+  0,
+  (intptr_t)"typeOfError",
+
+  offsetof(CriticalityDiagnostics_IE_List_1, iE_Extensions) | 0x8000000,
+  (intptr_t)asn1_type_ProtocolExtensionContainer_2,
+  offsetof(CriticalityDiagnostics_IE_List_1, iE_Extensions_option),
+  (intptr_t)"iE-Extensions",
+
+};
+
+const ASN1CType asn1_type_TypeOfError[] = {
+  (ASN1_CTYPE_ENUMERATED << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x100002,
+  2,
+  0,
+  (intptr_t)"not-understood",
+  (intptr_t)"missing",
+  (intptr_t)"TypeOfError",
+};
+
+const ASN1CType asn1_type_Connect[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x10,
+  2,
+  sizeof(Connect),
+
+  offsetof(Connect, protocolIEs) | 0x0,
+  (intptr_t)asn1_type_ProtocolIE_Container_1,
+  0,
+  (intptr_t)"protocolIEs",
+
+  offsetof(Connect, protocolExtensions) | 0x8000000,
+  (intptr_t)asn1_type_ProtocolExtensionContainer_3,
+  offsetof(Connect, protocolExtensions_option),
+  (intptr_t)"protocolExtensions",
+
+  (intptr_t)"Connect",
+};
+
+const ASN1CType asn1_type_DirectTransfer[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x10,
+  2,
+  sizeof(DirectTransfer),
+
+  offsetof(DirectTransfer, protocolIEs) | 0x0,
+  (intptr_t)asn1_type_ProtocolIE_Container_2,
+  0,
+  (intptr_t)"protocolIEs",
+
+  offsetof(DirectTransfer, protocolExtensions) | 0x8000000,
+  (intptr_t)asn1_type_ProtocolExtensionContainer_4,
+  offsetof(DirectTransfer, protocolExtensions_option),
+  (intptr_t)"protocolExtensions",
+
+  (intptr_t)"DirectTransfer",
+};
+
+const ASN1CType asn1_type_Disconnect[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x10,
+  2,
+  sizeof(Disconnect),
+
+  offsetof(Disconnect, protocolIEs) | 0x0,
+  (intptr_t)asn1_type_ProtocolIE_Container_3,
+  0,
+  (intptr_t)"protocolIEs",
+
+  offsetof(Disconnect, protocolExtensions) | 0x8000000,
+  (intptr_t)asn1_type_ProtocolExtensionContainer_5,
+  offsetof(Disconnect, protocolExtensions_option),
+  (intptr_t)"protocolExtensions",
+
+  (intptr_t)"Disconnect",
+};
+
+const ASN1CType asn1_type_ConnectionlessTransfer[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x10,
+  2,
+  sizeof(ConnectionlessTransfer),
+
+  offsetof(ConnectionlessTransfer, protocolIEs) | 0x0,
+  (intptr_t)asn1_type_ProtocolIE_Container_4,
+  0,
+  (intptr_t)"protocolIEs",
+
+  offsetof(ConnectionlessTransfer, protocolExtensions) | 0x8000000,
+  (intptr_t)asn1_type_ProtocolExtensionContainer_6,
+  offsetof(ConnectionlessTransfer, protocolExtensions_option),
+  (intptr_t)"protocolExtensions",
+
+  (intptr_t)"ConnectionlessTransfer",
+};
+
+const ASN1CType asn1_type_ErrorIndication[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x10,
+  2,
+  sizeof(ErrorIndication),
+
+  offsetof(ErrorIndication, protocolIEs) | 0x0,
+  (intptr_t)asn1_type_ProtocolIE_Container_5,
+  0,
+  (intptr_t)"protocolIEs",
+
+  offsetof(ErrorIndication, protocolExtensions) | 0x8000000,
+  (intptr_t)asn1_type_ProtocolExtensionContainer_7,
+  offsetof(ErrorIndication, protocolExtensions_option),
+  (intptr_t)"protocolExtensions",
+
+  (intptr_t)"ErrorIndication",
+};
+
+const ASN1CType asn1_type_PrivateMessage[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x10,
+  1,
+  sizeof(PrivateMessage),
+
+  offsetof(PrivateMessage, privateIEs) | 0x0,
+  (intptr_t)asn1_type_PrivateIE_Container_1,
+  0,
+  (intptr_t)"privateIEs",
+
+  (intptr_t)"PrivateMessage",
+};
+
+static const Criticality asn1_value__local_121 = 1;
+
+const ASN1CType asn1_type_RUA_ELEMENTARY_PROCEDURE[] = {
+  (ASN1_CTYPE_OBJECT_CLASS << ASN1_CTYPE_SHIFT) | 0x4000000 | 0x0,
+  5,
+
+  0x0,
+  0,
+  0,
+  (intptr_t)"&InitiatingMessage",
+
+  0x8,
+  0,
+  0,
+  (intptr_t)"&SuccessfulOutcome",
+
+  0x8,
+  0,
+  0,
+  (intptr_t)"&UnsuccessfulOutcome",
+
+  0x1,
+  (intptr_t)asn1_type_ProcedureCode,
+  0,
+  (intptr_t)"&procedureCode",
+
+  0x11,
+  (intptr_t)asn1_type_Criticality,
+  (intptr_t)&asn1_value__local_121,
+  (intptr_t)"&criticality",
+  (intptr_t)"RUA-ELEMENTARY-PROCEDURE",
+};
+
+const ASN1CType asn1_type_RUA_PDU[] = {
+  (ASN1_CTYPE_CHOICE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x0,
+  3,
+  0,
+  sizeof(RUA_PDU),
+  offsetof(RUA_PDU, choice),
+  offsetof(RUA_PDU, u),
+  (intptr_t)asn1_type_InitiatingMessage,
+  (intptr_t)"initiatingMessage",
+  (intptr_t)asn1_type_SuccessfulOutcome,
+  (intptr_t)"successfulOutcome",
+  (intptr_t)asn1_type_UnsuccessfulOutcome,
+  (intptr_t)"unsuccessfulOutcome",
+  (intptr_t)"RUA-PDU",
+};
+
+static const ASN1CType asn1_type__local_122[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  (intptr_t)asn1_type_ProcedureCode,
+};
+
+static const ASN1CType asn1_type__local_123[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  (intptr_t)asn1_type_Criticality,
+};
+
+static const ProcedureCode asn1_value__local_127 = 1;
+
+static const Criticality asn1_value__local_128 = 1;
+
+static const ProcedureCode asn1_value__local_129 = 2;
+
+static const Criticality asn1_value__local_130 = 1;
+
+static const ProcedureCode asn1_value__local_131 = 3;
+
+static const Criticality asn1_value__local_132 = 1;
+
+static const ProcedureCode asn1_value__local_133 = 4;
+
+static const Criticality asn1_value__local_134 = 1;
+
+static const ProcedureCode asn1_value__local_135 = 5;
+
+static const Criticality asn1_value__local_136 = 1;
+
+static const ProcedureCode asn1_value__local_137 = 6;
+
+static const Criticality asn1_value__local_138 = 1;
+
+static const RUA_ELEMENTARY_PROCEDURE asn1_value__local_126[] = {
+{
+  (intptr_t)asn1_type_Connect,
+  0,
+  0,
+  (intptr_t)&asn1_value__local_127,
+  (intptr_t)&asn1_value__local_128,
+},
+{
+  (intptr_t)asn1_type_DirectTransfer,
+  0,
+  0,
+  (intptr_t)&asn1_value__local_129,
+  (intptr_t)&asn1_value__local_130,
+},
+{
+  (intptr_t)asn1_type_Disconnect,
+  0,
+  0,
+  (intptr_t)&asn1_value__local_131,
+  (intptr_t)&asn1_value__local_132,
+},
+{
+  (intptr_t)asn1_type_ConnectionlessTransfer,
+  0,
+  0,
+  (intptr_t)&asn1_value__local_133,
+  (intptr_t)&asn1_value__local_134,
+},
+{
+  (intptr_t)asn1_type_ErrorIndication,
+  0,
+  0,
+  (intptr_t)&asn1_value__local_135,
+  (intptr_t)&asn1_value__local_136,
+},
+{
+  (intptr_t)asn1_type_PrivateMessage,
+  0,
+  0,
+  (intptr_t)&asn1_value__local_137,
+  (intptr_t)&asn1_value__local_138,
+},
+};
+
+static const ASN1CType asn1_constraint__local_125[] = {
+  ASN1_CCONSTRAINT_TABLE,
+  (intptr_t)asn1_type_RUA_ELEMENTARY_PROCEDURE,
+  0,
+  (intptr_t)asn1_value__local_126,
+  6,
+  1,
+  0,
+  0x80000000,
+  3,
+};
+
+static const ASN1CType asn1_type__local_124[] = {
+  (ASN1_CTYPE_ANY << ASN1_CTYPE_SHIFT) | 0x200000 | 0x100002,
+  (intptr_t)asn1_constraint__local_125,
+};
+
+const ASN1CType asn1_type_InitiatingMessage[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x4000000 | 0x100000,
+  3,
+  sizeof(InitiatingMessage),
+
+  offsetof(InitiatingMessage, procedureCode) | 0x0,
+  (intptr_t)asn1_type__local_122,
+  0,
+  (intptr_t)"procedureCode",
+
+  offsetof(InitiatingMessage, criticality) | 0x0,
+  (intptr_t)asn1_type__local_123,
+  0,
+  (intptr_t)"criticality",
+
+  offsetof(InitiatingMessage, value) | 0x0,
+  (intptr_t)asn1_type__local_124,
+  0,
+  (intptr_t)"value",
+
+  (intptr_t)"InitiatingMessage",
+};
+
+static const ASN1CType asn1_type__local_139[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  (intptr_t)asn1_type_ProcedureCode,
+};
+
+static const ASN1CType asn1_type__local_140[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  (intptr_t)asn1_type_Criticality,
+};
+
+static const ProcedureCode asn1_value__local_144 = 1;
+
+static const Criticality asn1_value__local_145 = 1;
+
+static const ProcedureCode asn1_value__local_146 = 2;
+
+static const Criticality asn1_value__local_147 = 1;
+
+static const ProcedureCode asn1_value__local_148 = 3;
+
+static const Criticality asn1_value__local_149 = 1;
+
+static const ProcedureCode asn1_value__local_150 = 4;
+
+static const Criticality asn1_value__local_151 = 1;
+
+static const ProcedureCode asn1_value__local_152 = 5;
+
+static const Criticality asn1_value__local_153 = 1;
+
+static const ProcedureCode asn1_value__local_154 = 6;
+
+static const Criticality asn1_value__local_155 = 1;
+
+static const RUA_ELEMENTARY_PROCEDURE asn1_value__local_143[] = {
+{
+  (intptr_t)asn1_type_Connect,
+  0,
+  0,
+  (intptr_t)&asn1_value__local_144,
+  (intptr_t)&asn1_value__local_145,
+},
+{
+  (intptr_t)asn1_type_DirectTransfer,
+  0,
+  0,
+  (intptr_t)&asn1_value__local_146,
+  (intptr_t)&asn1_value__local_147,
+},
+{
+  (intptr_t)asn1_type_Disconnect,
+  0,
+  0,
+  (intptr_t)&asn1_value__local_148,
+  (intptr_t)&asn1_value__local_149,
+},
+{
+  (intptr_t)asn1_type_ConnectionlessTransfer,
+  0,
+  0,
+  (intptr_t)&asn1_value__local_150,
+  (intptr_t)&asn1_value__local_151,
+},
+{
+  (intptr_t)asn1_type_ErrorIndication,
+  0,
+  0,
+  (intptr_t)&asn1_value__local_152,
+  (intptr_t)&asn1_value__local_153,
+},
+{
+  (intptr_t)asn1_type_PrivateMessage,
+  0,
+  0,
+  (intptr_t)&asn1_value__local_154,
+  (intptr_t)&asn1_value__local_155,
+},
+};
+
+static const ASN1CType asn1_constraint__local_142[] = {
+  ASN1_CCONSTRAINT_TABLE,
+  (intptr_t)asn1_type_RUA_ELEMENTARY_PROCEDURE,
+  1,
+  (intptr_t)asn1_value__local_143,
+  6,
+  1,
+  0,
+  0x80000000,
+  3,
+};
+
+static const ASN1CType asn1_type__local_141[] = {
+  (ASN1_CTYPE_ANY << ASN1_CTYPE_SHIFT) | 0x200000 | 0x100002,
+  (intptr_t)asn1_constraint__local_142,
+};
+
+const ASN1CType asn1_type_SuccessfulOutcome[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x4000000 | 0x100001,
+  3,
+  sizeof(SuccessfulOutcome),
+
+  offsetof(SuccessfulOutcome, procedureCode) | 0x0,
+  (intptr_t)asn1_type__local_139,
+  0,
+  (intptr_t)"procedureCode",
+
+  offsetof(SuccessfulOutcome, criticality) | 0x0,
+  (intptr_t)asn1_type__local_140,
+  0,
+  (intptr_t)"criticality",
+
+  offsetof(SuccessfulOutcome, value) | 0x0,
+  (intptr_t)asn1_type__local_141,
+  0,
+  (intptr_t)"value",
+
+  (intptr_t)"SuccessfulOutcome",
+};
+
+static const ASN1CType asn1_type__local_156[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+  (intptr_t)asn1_type_ProcedureCode,
+};
+
+static const ASN1CType asn1_type__local_157[] = {
+  (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+  (intptr_t)asn1_type_Criticality,
+};
+
+static const ProcedureCode asn1_value__local_161 = 1;
+
+static const Criticality asn1_value__local_162 = 1;
+
+static const ProcedureCode asn1_value__local_163 = 2;
+
+static const Criticality asn1_value__local_164 = 1;
+
+static const ProcedureCode asn1_value__local_165 = 3;
+
+static const Criticality asn1_value__local_166 = 1;
+
+static const ProcedureCode asn1_value__local_167 = 4;
+
+static const Criticality asn1_value__local_168 = 1;
+
+static const ProcedureCode asn1_value__local_169 = 5;
+
+static const Criticality asn1_value__local_170 = 1;
+
+static const ProcedureCode asn1_value__local_171 = 6;
+
+static const Criticality asn1_value__local_172 = 1;
+
+static const RUA_ELEMENTARY_PROCEDURE asn1_value__local_160[] = {
+{
+  (intptr_t)asn1_type_Connect,
+  0,
+  0,
+  (intptr_t)&asn1_value__local_161,
+  (intptr_t)&asn1_value__local_162,
+},
+{
+  (intptr_t)asn1_type_DirectTransfer,
+  0,
+  0,
+  (intptr_t)&asn1_value__local_163,
+  (intptr_t)&asn1_value__local_164,
+},
+{
+  (intptr_t)asn1_type_Disconnect,
+  0,
+  0,
+  (intptr_t)&asn1_value__local_165,
+  (intptr_t)&asn1_value__local_166,
+},
+{
+  (intptr_t)asn1_type_ConnectionlessTransfer,
+  0,
+  0,
+  (intptr_t)&asn1_value__local_167,
+  (intptr_t)&asn1_value__local_168,
+},
+{
+  (intptr_t)asn1_type_ErrorIndication,
+  0,
+  0,
+  (intptr_t)&asn1_value__local_169,
+  (intptr_t)&asn1_value__local_170,
+},
+{
+  (intptr_t)asn1_type_PrivateMessage,
+  0,
+  0,
+  (intptr_t)&asn1_value__local_171,
+  (intptr_t)&asn1_value__local_172,
+},
+};
+
+static const ASN1CType asn1_constraint__local_159[] = {
+  ASN1_CCONSTRAINT_TABLE,
+  (intptr_t)asn1_type_RUA_ELEMENTARY_PROCEDURE,
+  2,
+  (intptr_t)asn1_value__local_160,
+  6,
+  1,
+  0,
+  0x80000000,
+  3,
+};
+
+static const ASN1CType asn1_type__local_158[] = {
+  (ASN1_CTYPE_ANY << ASN1_CTYPE_SHIFT) | 0x200000 | 0x100002,
+  (intptr_t)asn1_constraint__local_159,
+};
+
+const ASN1CType asn1_type_UnsuccessfulOutcome[] = {
+  (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x4000000 | 0x100002,
+  3,
+  sizeof(UnsuccessfulOutcome),
+
+  offsetof(UnsuccessfulOutcome, procedureCode) | 0x0,
+  (intptr_t)asn1_type__local_156,
+  0,
+  (intptr_t)"procedureCode",
+
+  offsetof(UnsuccessfulOutcome, criticality) | 0x0,
+  (intptr_t)asn1_type__local_157,
+  0,
+  (intptr_t)"criticality",
+
+  offsetof(UnsuccessfulOutcome, value) | 0x0,
+  (intptr_t)asn1_type__local_158,
+  0,
+  (intptr_t)"value",
+
+  (intptr_t)"UnsuccessfulOutcome",
+};
+
diff --git a/asn1/rua/ffasn1c/out.h b/asn1/rua/ffasn1c/out.h
new file mode 100644
index 0000000..7d102f1
--- /dev/null
+++ b/asn1/rua/ffasn1c/out.h
@@ -0,0 +1,683 @@
+/* Automatically generated file - do not edit */
+#ifndef _FFASN1_OUT_H
+#define _FFASN1_OUT_H
+
+#include "asn1defs.h"
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+typedef enum Criticality {
+  Criticality_reject,
+  Criticality_ignore,
+  Criticality_notify,
+} Criticality;
+
+extern const ASN1CType asn1_type_Criticality[];
+
+typedef enum Presence {
+  Presence_optional,
+  Presence_conditional,
+  Presence_mandatory,
+} Presence;
+
+extern const ASN1CType asn1_type_Presence[];
+
+typedef int ProcedureCode;
+
+extern const ASN1CType asn1_type_ProcedureCode[];
+
+typedef enum {
+  PrivateIE_ID_local,
+  PrivateIE_ID_global,
+} PrivateIE_ID_choice;
+
+typedef struct PrivateIE_ID {
+  PrivateIE_ID_choice choice;
+  union {
+    int local;
+    ASN1ObjectIdentifier global;
+  } u;
+} PrivateIE_ID;
+
+extern const ASN1CType asn1_type_PrivateIE_ID[];
+
+typedef int ProtocolIE_ID;
+
+extern const ASN1CType asn1_type_ProtocolIE_ID[];
+
+typedef enum TriggeringMessage {
+  TriggeringMessage_initiating_message,
+  TriggeringMessage_successful_outcome,
+  TriggeringMessage_unsuccessful_outcome,
+} TriggeringMessage;
+
+extern const ASN1CType asn1_type_TriggeringMessage[];
+
+typedef struct RUA_PRIVATE_IES { /* object class definition */
+  ASN1CType id;
+  ASN1CType criticality;
+  ASN1CType Value;
+  ASN1CType presence;
+} RUA_PRIVATE_IES;
+
+
+extern const ASN1CType asn1_type_RUA_PRIVATE_IES[];
+
+typedef struct RUA_PROTOCOL_IES { /* object class definition */
+  ASN1CType id;
+  ASN1CType criticality;
+  ASN1CType Value;
+  ASN1CType presence;
+} RUA_PROTOCOL_IES;
+
+
+extern const ASN1CType asn1_type_RUA_PROTOCOL_IES[];
+
+typedef struct RUA_PROTOCOL_EXTENSION { /* object class definition */
+  ASN1CType id;
+  ASN1CType criticality;
+  ASN1CType Extension;
+  ASN1CType presence;
+} RUA_PROTOCOL_EXTENSION;
+
+
+extern const ASN1CType asn1_type_RUA_PROTOCOL_EXTENSION[];
+
+typedef enum CN_DomainIndicator {
+  CN_DomainIndicator_cs_domain,
+  CN_DomainIndicator_ps_domain,
+} CN_DomainIndicator;
+
+extern const ASN1CType asn1_type_CN_DomainIndicator[];
+
+typedef enum CSGMembershipStatus {
+  CSGMembershipStatus_member,
+  CSGMembershipStatus_non_member,
+} CSGMembershipStatus;
+
+extern const ASN1CType asn1_type_CSGMembershipStatus[];
+
+typedef enum Establishment_Cause {
+  Establishment_Cause_emergency_call,
+  Establishment_Cause_normal_call,
+} Establishment_Cause;
+
+extern const ASN1CType asn1_type_Establishment_Cause[];
+
+typedef ASN1BitString Context_ID;
+
+extern const ASN1CType asn1_type_Context_ID[];
+
+typedef ASN1BitString RoutingParameter;
+
+extern const ASN1CType asn1_type_RoutingParameter[];
+
+typedef struct Gsm_map_IDNNS_1 {
+  RoutingParameter routingparameter;
+} Gsm_map_IDNNS_1;
+
+
+extern const ASN1CType asn1_type_Gsm_map_IDNNS_1[];
+
+typedef struct Gsm_map_IDNNS_2 {
+  RoutingParameter routingparameter;
+} Gsm_map_IDNNS_2;
+
+
+extern const ASN1CType asn1_type_Gsm_map_IDNNS_2[];
+
+typedef struct Gsm_map_IDNNS_3 {
+  RoutingParameter routingparameter;
+} Gsm_map_IDNNS_3;
+
+
+extern const ASN1CType asn1_type_Gsm_map_IDNNS_3[];
+
+typedef struct Gsm_map_IDNNS_4 {
+  RoutingParameter routingparameter;
+} Gsm_map_IDNNS_4;
+
+
+extern const ASN1CType asn1_type_Gsm_map_IDNNS_4[];
+
+typedef struct Gsm_map_IDNNS_5 {
+  RoutingParameter routingparameter;
+} Gsm_map_IDNNS_5;
+
+
+extern const ASN1CType asn1_type_Gsm_map_IDNNS_5[];
+
+typedef struct Gsm_map_IDNNS_6 {
+  RoutingParameter routingparameter;
+} Gsm_map_IDNNS_6;
+
+
+extern const ASN1CType asn1_type_Gsm_map_IDNNS_6[];
+
+typedef struct Gsm_map_IDNNS_7 {
+  RoutingParameter routingparameter;
+} Gsm_map_IDNNS_7;
+
+
+extern const ASN1CType asn1_type_Gsm_map_IDNNS_7[];
+
+typedef struct Gsm_map_IDNNS_8 {
+  RoutingParameter routingparameter;
+} Gsm_map_IDNNS_8;
+
+
+extern const ASN1CType asn1_type_Gsm_map_IDNNS_8[];
+
+typedef enum {
+  Gsm_map_IDNNS_9_localPTMSI,
+  Gsm_map_IDNNS_9_tMSIofsamePLMN,
+  Gsm_map_IDNNS_9_tMSIofdifferentPLMN,
+  Gsm_map_IDNNS_9_iMSIresponsetopaging,
+  Gsm_map_IDNNS_9_iMSIcauseUEinitiatedEvent,
+  Gsm_map_IDNNS_9_iMEI,
+  Gsm_map_IDNNS_9_spare2,
+  Gsm_map_IDNNS_9_spare1,
+} Gsm_map_IDNNS_9_choice;
+
+typedef struct Gsm_map_IDNNS_9 {
+  Gsm_map_IDNNS_9_choice choice;
+  union {
+    Gsm_map_IDNNS_1 localPTMSI;
+    Gsm_map_IDNNS_2 tMSIofsamePLMN;
+    Gsm_map_IDNNS_3 tMSIofdifferentPLMN;
+    Gsm_map_IDNNS_4 iMSIresponsetopaging;
+    Gsm_map_IDNNS_5 iMSIcauseUEinitiatedEvent;
+    Gsm_map_IDNNS_6 iMEI;
+    Gsm_map_IDNNS_7 spare2;
+    Gsm_map_IDNNS_8 spare1;
+  } u;
+} Gsm_map_IDNNS_9;
+
+extern const ASN1CType asn1_type_Gsm_map_IDNNS_9[];
+
+typedef struct Gsm_map_IDNNS {
+  Gsm_map_IDNNS_9 routingbasis;
+  BOOL dummy;
+} Gsm_map_IDNNS;
+
+
+extern const ASN1CType asn1_type_Gsm_map_IDNNS[];
+
+typedef ASN1BitString Ansi_41_IDNNS;
+
+extern const ASN1CType asn1_type_Ansi_41_IDNNS[];
+
+typedef enum {
+  IntraDomainNasNodeSelector_1_gsm_Map_IDNNS,
+  IntraDomainNasNodeSelector_1_ansi_41_IDNNS,
+} IntraDomainNasNodeSelector_1_choice;
+
+typedef struct IntraDomainNasNodeSelector_1 {
+  IntraDomainNasNodeSelector_1_choice choice;
+  union {
+    Gsm_map_IDNNS gsm_Map_IDNNS;
+    Ansi_41_IDNNS ansi_41_IDNNS;
+  } u;
+} IntraDomainNasNodeSelector_1;
+
+extern const ASN1CType asn1_type_IntraDomainNasNodeSelector_1[];
+
+typedef struct IntraDomainNasNodeSelector_2 {
+  IntraDomainNasNodeSelector_1 cn_Type;
+} IntraDomainNasNodeSelector_2;
+
+
+extern const ASN1CType asn1_type_IntraDomainNasNodeSelector_2[];
+
+typedef struct IntraDomainNasNodeSelector_3 {
+  ASN1BitString futurecoding;
+} IntraDomainNasNodeSelector_3;
+
+
+extern const ASN1CType asn1_type_IntraDomainNasNodeSelector_3[];
+
+typedef enum {
+  IntraDomainNasNodeSelector_4_release99,
+  IntraDomainNasNodeSelector_4_later,
+} IntraDomainNasNodeSelector_4_choice;
+
+typedef struct IntraDomainNasNodeSelector_4 {
+  IntraDomainNasNodeSelector_4_choice choice;
+  union {
+    IntraDomainNasNodeSelector_2 release99;
+    IntraDomainNasNodeSelector_3 later;
+  } u;
+} IntraDomainNasNodeSelector_4;
+
+extern const ASN1CType asn1_type_IntraDomainNasNodeSelector_4[];
+
+typedef struct IntraDomainNasNodeSelector {
+  IntraDomainNasNodeSelector_4 version;
+} IntraDomainNasNodeSelector;
+
+
+extern const ASN1CType asn1_type_IntraDomainNasNodeSelector[];
+
+typedef ASN1String RANAP_Message;
+
+extern const ASN1CType asn1_type_RANAP_Message[];
+
+typedef enum CauseRadioNetwork {
+  CauseRadioNetwork_normal,
+  CauseRadioNetwork_connect_failed,
+  CauseRadioNetwork_network_release,
+  CauseRadioNetwork_unspecified,
+} CauseRadioNetwork;
+
+extern const ASN1CType asn1_type_CauseRadioNetwork[];
+
+typedef enum CauseTransport {
+  CauseTransport_transport_resource_unavailable,
+  CauseTransport_unspecified,
+} CauseTransport;
+
+extern const ASN1CType asn1_type_CauseTransport[];
+
+typedef enum CauseProtocol {
+  CauseProtocol_transfer_syntax_error,
+  CauseProtocol_abstract_syntax_error_reject,
+  CauseProtocol_abstract_syntax_error_ignore_and_notify,
+  CauseProtocol_message_not_compatible_with_receiver_state,
+  CauseProtocol_semantic_error,
+  CauseProtocol_unspecified,
+  CauseProtocol_abstract_syntax_error_falsely_constructed_message,
+} CauseProtocol;
+
+extern const ASN1CType asn1_type_CauseProtocol[];
+
+typedef enum CauseMisc {
+  CauseMisc_processing_overload,
+  CauseMisc_hardware_failure,
+  CauseMisc_o_and_m_intervention,
+  CauseMisc_unspecified,
+} CauseMisc;
+
+extern const ASN1CType asn1_type_CauseMisc[];
+
+typedef enum {
+  Cause_radioNetwork,
+  Cause_transport,
+  Cause_protocol,
+  Cause_misc,
+} Cause_choice;
+
+typedef struct Cause {
+  Cause_choice choice;
+  union {
+    CauseRadioNetwork radioNetwork;
+    CauseTransport transport;
+    CauseProtocol protocol;
+    CauseMisc misc;
+  } u;
+} Cause;
+
+extern const ASN1CType asn1_type_Cause[];
+
+typedef enum TypeOfError {
+  TypeOfError_not_understood,
+  TypeOfError_missing,
+} TypeOfError;
+
+extern const ASN1CType asn1_type_TypeOfError[];
+
+typedef struct ProtocolExtensionField_2 {
+  ProtocolIE_ID id;
+  Criticality criticality;
+  ASN1OpenType extensionValue;
+} ProtocolExtensionField_2;
+
+
+extern const ASN1CType asn1_type_ProtocolExtensionField_2[];
+
+typedef struct ProtocolExtensionContainer_2 {
+  ProtocolExtensionField_2 *tab;
+  int count;
+} ProtocolExtensionContainer_2;
+
+extern const ASN1CType asn1_type_ProtocolExtensionContainer_2[];
+
+typedef struct CriticalityDiagnostics_IE_List_1 {
+  Criticality iECriticality;
+  ProtocolIE_ID iE_ID;
+  TypeOfError typeOfError;
+  BOOL iE_Extensions_option;
+  ProtocolExtensionContainer_2 iE_Extensions;
+} CriticalityDiagnostics_IE_List_1;
+
+
+extern const ASN1CType asn1_type_CriticalityDiagnostics_IE_List_1[];
+
+typedef struct CriticalityDiagnostics_IE_List {
+  CriticalityDiagnostics_IE_List_1 *tab;
+  int count;
+} CriticalityDiagnostics_IE_List;
+
+extern const ASN1CType asn1_type_CriticalityDiagnostics_IE_List[];
+
+typedef struct ProtocolExtensionField_1 {
+  ProtocolIE_ID id;
+  Criticality criticality;
+  ASN1OpenType extensionValue;
+} ProtocolExtensionField_1;
+
+
+extern const ASN1CType asn1_type_ProtocolExtensionField_1[];
+
+typedef struct ProtocolExtensionContainer_1 {
+  ProtocolExtensionField_1 *tab;
+  int count;
+} ProtocolExtensionContainer_1;
+
+extern const ASN1CType asn1_type_ProtocolExtensionContainer_1[];
+
+typedef struct CriticalityDiagnostics {
+  BOOL procedureCode_option;
+  ProcedureCode procedureCode;
+  BOOL triggeringMessage_option;
+  TriggeringMessage triggeringMessage;
+  BOOL procedureCriticality_option;
+  Criticality procedureCriticality;
+  BOOL iEsCriticalityDiagnostics_option;
+  CriticalityDiagnostics_IE_List iEsCriticalityDiagnostics;
+  BOOL iE_Extensions_option;
+  ProtocolExtensionContainer_1 iE_Extensions;
+} CriticalityDiagnostics;
+
+
+extern const ASN1CType asn1_type_CriticalityDiagnostics[];
+
+typedef struct ProtocolIE_Field_1 {
+  ProtocolIE_ID id;
+  Criticality criticality;
+  ASN1OpenType value;
+} ProtocolIE_Field_1;
+
+
+extern const ASN1CType asn1_type_ProtocolIE_Field_1[];
+
+typedef struct ProtocolIE_Container_1 {
+  ProtocolIE_Field_1 *tab;
+  int count;
+} ProtocolIE_Container_1;
+
+extern const ASN1CType asn1_type_ProtocolIE_Container_1[];
+
+typedef struct ProtocolExtensionField_3 {
+  ProtocolIE_ID id;
+  Criticality criticality;
+  ASN1OpenType extensionValue;
+} ProtocolExtensionField_3;
+
+
+extern const ASN1CType asn1_type_ProtocolExtensionField_3[];
+
+typedef struct ProtocolExtensionContainer_3 {
+  ProtocolExtensionField_3 *tab;
+  int count;
+} ProtocolExtensionContainer_3;
+
+extern const ASN1CType asn1_type_ProtocolExtensionContainer_3[];
+
+typedef struct Connect {
+  ProtocolIE_Container_1 protocolIEs;
+  BOOL protocolExtensions_option;
+  ProtocolExtensionContainer_3 protocolExtensions;
+} Connect;
+
+
+extern const ASN1CType asn1_type_Connect[];
+
+typedef struct ProtocolIE_Field_2 {
+  ProtocolIE_ID id;
+  Criticality criticality;
+  ASN1OpenType value;
+} ProtocolIE_Field_2;
+
+
+extern const ASN1CType asn1_type_ProtocolIE_Field_2[];
+
+typedef struct ProtocolIE_Container_2 {
+  ProtocolIE_Field_2 *tab;
+  int count;
+} ProtocolIE_Container_2;
+
+extern const ASN1CType asn1_type_ProtocolIE_Container_2[];
+
+typedef struct ProtocolExtensionField_4 {
+  ProtocolIE_ID id;
+  Criticality criticality;
+  ASN1OpenType extensionValue;
+} ProtocolExtensionField_4;
+
+
+extern const ASN1CType asn1_type_ProtocolExtensionField_4[];
+
+typedef struct ProtocolExtensionContainer_4 {
+  ProtocolExtensionField_4 *tab;
+  int count;
+} ProtocolExtensionContainer_4;
+
+extern const ASN1CType asn1_type_ProtocolExtensionContainer_4[];
+
+typedef struct DirectTransfer {
+  ProtocolIE_Container_2 protocolIEs;
+  BOOL protocolExtensions_option;
+  ProtocolExtensionContainer_4 protocolExtensions;
+} DirectTransfer;
+
+
+extern const ASN1CType asn1_type_DirectTransfer[];
+
+typedef struct ProtocolIE_Field_3 {
+  ProtocolIE_ID id;
+  Criticality criticality;
+  ASN1OpenType value;
+} ProtocolIE_Field_3;
+
+
+extern const ASN1CType asn1_type_ProtocolIE_Field_3[];
+
+typedef struct ProtocolIE_Container_3 {
+  ProtocolIE_Field_3 *tab;
+  int count;
+} ProtocolIE_Container_3;
+
+extern const ASN1CType asn1_type_ProtocolIE_Container_3[];
+
+typedef struct ProtocolExtensionField_5 {
+  ProtocolIE_ID id;
+  Criticality criticality;
+  ASN1OpenType extensionValue;
+} ProtocolExtensionField_5;
+
+
+extern const ASN1CType asn1_type_ProtocolExtensionField_5[];
+
+typedef struct ProtocolExtensionContainer_5 {
+  ProtocolExtensionField_5 *tab;
+  int count;
+} ProtocolExtensionContainer_5;
+
+extern const ASN1CType asn1_type_ProtocolExtensionContainer_5[];
+
+typedef struct Disconnect {
+  ProtocolIE_Container_3 protocolIEs;
+  BOOL protocolExtensions_option;
+  ProtocolExtensionContainer_5 protocolExtensions;
+} Disconnect;
+
+
+extern const ASN1CType asn1_type_Disconnect[];
+
+typedef struct ProtocolIE_Field_4 {
+  ProtocolIE_ID id;
+  Criticality criticality;
+  ASN1OpenType value;
+} ProtocolIE_Field_4;
+
+
+extern const ASN1CType asn1_type_ProtocolIE_Field_4[];
+
+typedef struct ProtocolIE_Container_4 {
+  ProtocolIE_Field_4 *tab;
+  int count;
+} ProtocolIE_Container_4;
+
+extern const ASN1CType asn1_type_ProtocolIE_Container_4[];
+
+typedef struct ProtocolExtensionField_6 {
+  ProtocolIE_ID id;
+  Criticality criticality;
+  ASN1OpenType extensionValue;
+} ProtocolExtensionField_6;
+
+
+extern const ASN1CType asn1_type_ProtocolExtensionField_6[];
+
+typedef struct ProtocolExtensionContainer_6 {
+  ProtocolExtensionField_6 *tab;
+  int count;
+} ProtocolExtensionContainer_6;
+
+extern const ASN1CType asn1_type_ProtocolExtensionContainer_6[];
+
+typedef struct ConnectionlessTransfer {
+  ProtocolIE_Container_4 protocolIEs;
+  BOOL protocolExtensions_option;
+  ProtocolExtensionContainer_6 protocolExtensions;
+} ConnectionlessTransfer;
+
+
+extern const ASN1CType asn1_type_ConnectionlessTransfer[];
+
+typedef struct ProtocolIE_Field_5 {
+  ProtocolIE_ID id;
+  Criticality criticality;
+  ASN1OpenType value;
+} ProtocolIE_Field_5;
+
+
+extern const ASN1CType asn1_type_ProtocolIE_Field_5[];
+
+typedef struct ProtocolIE_Container_5 {
+  ProtocolIE_Field_5 *tab;
+  int count;
+} ProtocolIE_Container_5;
+
+extern const ASN1CType asn1_type_ProtocolIE_Container_5[];
+
+typedef struct ProtocolExtensionField_7 {
+  ProtocolIE_ID id;
+  Criticality criticality;
+  ASN1OpenType extensionValue;
+} ProtocolExtensionField_7;
+
+
+extern const ASN1CType asn1_type_ProtocolExtensionField_7[];
+
+typedef struct ProtocolExtensionContainer_7 {
+  ProtocolExtensionField_7 *tab;
+  int count;
+} ProtocolExtensionContainer_7;
+
+extern const ASN1CType asn1_type_ProtocolExtensionContainer_7[];
+
+typedef struct ErrorIndication {
+  ProtocolIE_Container_5 protocolIEs;
+  BOOL protocolExtensions_option;
+  ProtocolExtensionContainer_7 protocolExtensions;
+} ErrorIndication;
+
+
+extern const ASN1CType asn1_type_ErrorIndication[];
+
+typedef struct PrivateIE_Field_1 {
+  PrivateIE_ID id;
+  Criticality criticality;
+  ASN1OpenType value;
+} PrivateIE_Field_1;
+
+
+extern const ASN1CType asn1_type_PrivateIE_Field_1[];
+
+typedef struct PrivateIE_Container_1 {
+  PrivateIE_Field_1 *tab;
+  int count;
+} PrivateIE_Container_1;
+
+extern const ASN1CType asn1_type_PrivateIE_Container_1[];
+
+typedef struct PrivateMessage {
+  PrivateIE_Container_1 privateIEs;
+} PrivateMessage;
+
+
+extern const ASN1CType asn1_type_PrivateMessage[];
+
+typedef struct RUA_ELEMENTARY_PROCEDURE { /* object class definition */
+  ASN1CType InitiatingMessage;
+  ASN1CType SuccessfulOutcome;
+  ASN1CType UnsuccessfulOutcome;
+  ASN1CType procedureCode;
+  ASN1CType criticality;
+} RUA_ELEMENTARY_PROCEDURE;
+
+
+extern const ASN1CType asn1_type_RUA_ELEMENTARY_PROCEDURE[];
+
+typedef struct InitiatingMessage {
+  ProcedureCode procedureCode;
+  Criticality criticality;
+  ASN1OpenType value;
+} InitiatingMessage;
+
+
+extern const ASN1CType asn1_type_InitiatingMessage[];
+
+typedef struct SuccessfulOutcome {
+  ProcedureCode procedureCode;
+  Criticality criticality;
+  ASN1OpenType value;
+} SuccessfulOutcome;
+
+
+extern const ASN1CType asn1_type_SuccessfulOutcome[];
+
+typedef struct UnsuccessfulOutcome {
+  ProcedureCode procedureCode;
+  Criticality criticality;
+  ASN1OpenType value;
+} UnsuccessfulOutcome;
+
+
+extern const ASN1CType asn1_type_UnsuccessfulOutcome[];
+
+typedef enum {
+  RUA_PDU_initiatingMessage,
+  RUA_PDU_successfulOutcome,
+  RUA_PDU_unsuccessfulOutcome,
+} RUA_PDU_choice;
+
+typedef struct RUA_PDU {
+  RUA_PDU_choice choice;
+  union {
+    InitiatingMessage initiatingMessage;
+    SuccessfulOutcome successfulOutcome;
+    UnsuccessfulOutcome unsuccessfulOutcome;
+  } u;
+} RUA_PDU;
+
+extern const ASN1CType asn1_type_RUA_PDU[];
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif /* _FFASN1_OUT_H */
