proper support for SET OF and SEQUENCE OF constraints. managed to get it right without shift/reduce errors

diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c
index 9aa7e74..fe2d194 100644
--- a/libasn1parser/asn1p_y.c
+++ b/libasn1parser/asn1p_y.c
@@ -205,11 +205,11 @@
 
 
 
-#define	YYFINAL		381
+#define	YYFINAL		385
 #define	YYFLAG		-32768
 #define	YYNTBASE	115
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 355 ? yytranslate[x] : 210)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 355 ? yytranslate[x] : 212)
 
 static const char yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -261,125 +261,126 @@
    173,   177,   179,   183,   187,   189,   193,   195,   197,   199,
    203,   209,   210,   212,   214,   218,   221,   225,   230,   231,
    233,   234,   241,   243,   246,   248,   250,   253,   255,   259,
-   261,   265,   269,   271,   273,   275,   280,   282,   286,   288,
-   292,   296,   298,   302,   304,   308,   310,   312,   314,   316,
-   321,   322,   326,   328,   330,   332,   334,   336,   338,   342,
-   344,   347,   349,   351,   353,   355,   358,   361,   363,   365,
-   368,   371,   373,   375,   377,   379,   382,   384,   387,   389,
+   261,   263,   267,   271,   273,   275,   277,   282,   284,   288,
+   290,   294,   298,   300,   304,   306,   310,   312,   314,   316,
+   318,   323,   324,   328,   330,   332,   334,   336,   338,   340,
+   344,   346,   349,   351,   353,   355,   357,   360,   363,   365,
+   367,   370,   373,   375,   377,   379,   381,   384,   386,   389,
    391,   393,   395,   397,   399,   401,   403,   405,   407,   409,
-   411,   413,   415,   420,   425,   430,   435,   440,   442,   447,
-   449,   451,   453,   455,   457,   458,   460,   465,   469,   474,
-   476,   480,   486,   488,   492,   496,   500,   505,   509,   511,
-   515,   519,   523,   527,   529,   531,   533,   536,   539,   543,
-   545,   547,   549,   551,   553,   555,   557,   563,   565,   569,
-   571,   575,   576,   578,   580,   582,   584,   586,   588,   592,
-   597,   599,   603,   606,   610,   612,   616,   617,   619,   621,
-   624,   626,   628,   629,   633,   636,   640,   642,   646,   648,
-   653,   658,   660,   662,   664,   666,   667,   669,   671,   674,
-   677,   679,   681,   683,   685,   687
+   411,   413,   415,   417,   422,   427,   432,   437,   442,   444,
+   449,   451,   453,   455,   457,   459,   460,   462,   464,   469,
+   473,   478,   480,   484,   490,   492,   496,   500,   504,   509,
+   513,   515,   519,   523,   527,   531,   533,   535,   537,   540,
+   543,   547,   549,   551,   553,   555,   557,   559,   561,   567,
+   569,   573,   575,   579,   580,   582,   584,   586,   588,   590,
+   592,   596,   601,   603,   607,   610,   614,   616,   620,   621,
+   623,   625,   628,   630,   632,   633,   637,   640,   644,   646,
+   650,   652,   657,   662,   664,   666,   668,   670,   671,   673,
+   675,   678,   681,   683,   685,   687,   689,   691
 };
 
 static const short yyrhs[] = {   116,
-     0,   117,     0,   116,   117,     0,   206,   118,    34,   122,
+     0,   117,     0,   116,   117,     0,   208,   118,    34,   122,
      3,    21,   125,    39,     0,     0,   119,     0,   104,   120,
    105,     0,   104,   105,     0,   121,     0,   120,   121,     0,
-   208,     0,   208,   106,     9,   107,     0,     9,     0,     0,
+   210,     0,   210,   106,     9,   107,     0,     9,     0,     0,
    123,     0,   124,     0,   123,   124,     0,    41,    84,     0,
     52,    84,     0,    20,    84,     0,    43,    53,     0,    12,
     57,     0,     0,   126,     0,   127,     0,   126,   127,     0,
    129,     0,   134,     0,   140,     0,   164,     0,   137,     0,
      0,    38,    12,   128,     0,   172,     0,    54,   130,   108,
      0,    54,    46,     0,   131,     0,   130,   131,     0,   132,
-    46,   206,   118,     0,   133,     0,   132,   109,   133,     0,
-   206,     0,   208,     0,    42,   135,   108,     0,    42,    17,
+    46,   208,   118,     0,   133,     0,   132,   109,   133,     0,
+   208,     0,   210,     0,    42,   135,   108,     0,    42,    17,
    108,     0,    42,   108,     0,   136,     0,   135,   109,   136,
-     0,   206,     0,   208,     0,   206,   138,     3,   104,   139,
-   105,     0,   159,     0,   169,     0,     0,   179,     0,   206,
-     3,   204,    87,     0,   206,     3,   204,   156,     0,   206,
-     3,   146,     0,   206,   104,   141,   105,     3,   156,     0,
-   142,     0,   141,   109,   142,     0,   206,     0,   206,   110,
-   208,     0,   169,   110,   208,     0,   144,     0,   143,   109,
-   144,     0,   158,     0,   208,     0,   155,     0,   145,   109,
+     0,   208,     0,   210,     0,   208,   138,     3,   104,   139,
+   105,     0,   159,     0,   169,     0,     0,   181,     0,   208,
+     3,   206,    87,     0,   208,     3,   206,   156,     0,   208,
+     3,   146,     0,   208,   104,   141,   105,     3,   156,     0,
+   142,     0,   141,   109,   142,     0,   208,     0,   208,   110,
+   210,     0,   169,   110,   210,     0,   144,     0,   143,   109,
+   144,     0,   158,     0,   210,     0,   155,     0,   145,   109,
    155,     0,    28,   104,   148,   105,   150,     0,     0,    88,
-     0,   149,     0,   148,   109,   149,     0,   162,   196,     0,
-   162,   156,   147,     0,   162,   162,   196,   147,     0,     0,
+     0,   149,     0,   148,   109,   149,     0,   162,   198,     0,
+   162,   156,   147,     0,   162,   162,   198,   147,     0,     0,
    151,     0,     0,    95,    82,   104,   152,   153,   105,     0,
-   154,     0,   153,   154,     0,     4,     0,   162,     0,   209,
-   156,     0,   157,     0,   158,   177,   196,     0,   102,     0,
-   102,   111,   167,     0,   102,   111,   203,     0,   171,     0,
-   172,     0,   173,     0,   206,   104,   143,   105,     0,   159,
-     0,    56,    68,   159,     0,    11,     0,    11,   112,   206,
-     0,    11,   112,   208,     0,   207,     0,   207,   112,   160,
-     0,   161,     0,   160,   112,   161,     0,   163,     0,   163,
-     0,    13,     0,    14,     0,   208,   138,     3,   165,     0,
-     0,   104,   166,   168,     0,     5,     0,     7,     0,     6,
-     0,   203,     0,   167,     0,   208,     0,   206,   112,   208,
-     0,     4,     0,   168,     4,     0,    24,     0,    63,     0,
-    76,     0,   170,     0,    67,    81,     0,    65,    51,     0,
-    77,     0,    44,     0,    36,    71,     0,    26,    81,     0,
-    91,     0,    47,     0,    58,     0,    40,     0,    22,    81,
-     0,   169,     0,   170,   200,     0,    23,     0,    48,     0,
-    49,     0,    50,     0,    59,     0,    64,     0,    74,     0,
-    83,     0,    85,     0,    90,     0,    92,     0,    93,     0,
-    94,     0,    66,     0,    27,   104,   145,   105,     0,    78,
-   104,   145,   105,     0,    79,   104,   145,   105,     0,    78,
-   177,    68,   158,     0,    79,   177,    68,   158,     0,    18,
-     0,    18,    35,    25,   208,     0,    99,     0,   100,     0,
-    97,     0,    98,     0,    96,     0,     0,   178,     0,    80,
-   106,   179,   107,     0,   106,   179,   107,     0,   178,   106,
-   179,   107,     0,   180,     0,   180,   109,   102,     0,   180,
-   109,   102,   109,   180,     0,   181,     0,   180,   174,   181,
-     0,   180,   175,   181,     0,   181,   176,   181,     0,   183,
-   106,   179,   107,     0,   106,   179,   107,     0,   184,     0,
-   184,   182,   184,     0,    61,   182,   184,     0,   184,   182,
-    60,     0,    61,   182,    60,     0,   190,     0,   185,     0,
-   101,     0,   101,   113,     0,   113,   101,     0,   113,   101,
-   113,     0,    80,     0,    46,     0,   203,     0,   208,     0,
-     6,     0,    45,     0,    86,     0,    95,    30,   104,   186,
-   105,     0,   187,     0,   186,   109,   187,     0,   102,     0,
-   208,   177,   188,     0,     0,   189,     0,    73,     0,    15,
-     0,    69,     0,   191,     0,   192,     0,   104,   206,   105,
-     0,   191,   104,   193,   105,     0,   194,     0,   193,   109,
-   194,     0,   114,   195,     0,   114,   112,   195,     0,   208,
-     0,   195,   112,   208,     0,     0,   197,     0,    69,     0,
-    33,   198,     0,   184,     0,   169,     0,     0,   104,   199,
-   168,     0,   104,   105,     0,   104,   201,   105,     0,   202,
-     0,   201,   109,   202,     0,   208,     0,   208,   106,   203,
-   107,     0,   208,   106,   167,   107,     0,   203,     0,   102,
-     0,     9,     0,    10,     0,     0,   205,     0,   103,     0,
-   103,    52,     0,   103,    41,     0,    11,     0,    12,     0,
-    12,     0,     8,     0,   208,     0,   208,   205,     0
+   154,     0,   153,   154,     0,     4,     0,   162,     0,   211,
+   156,     0,   157,     0,   158,   178,   198,     0,   173,     0,
+   102,     0,   102,   111,   167,     0,   102,   111,   205,     0,
+   171,     0,   172,     0,   174,     0,   208,   104,   143,   105,
+     0,   159,     0,    56,    68,   159,     0,    11,     0,    11,
+   112,   208,     0,    11,   112,   210,     0,   209,     0,   209,
+   112,   160,     0,   161,     0,   160,   112,   161,     0,   163,
+     0,   163,     0,    13,     0,    14,     0,   210,   138,     3,
+   165,     0,     0,   104,   166,   168,     0,     5,     0,     7,
+     0,     6,     0,   205,     0,   167,     0,   210,     0,   208,
+   112,   210,     0,     4,     0,   168,     4,     0,    24,     0,
+    63,     0,    76,     0,   170,     0,    67,    81,     0,    65,
+    51,     0,    77,     0,    44,     0,    36,    71,     0,    26,
+    81,     0,    91,     0,    47,     0,    58,     0,    40,     0,
+    22,    81,     0,   169,     0,   170,   202,     0,    23,     0,
+    48,     0,    49,     0,    50,     0,    59,     0,    64,     0,
+    74,     0,    83,     0,    85,     0,    90,     0,    92,     0,
+    93,     0,    94,     0,    66,     0,    78,   178,    68,   156,
+     0,    79,   178,    68,   156,     0,    27,   104,   145,   105,
+     0,    78,   104,   145,   105,     0,    79,   104,   145,   105,
+     0,    18,     0,    18,    35,    25,   210,     0,    99,     0,
+   100,     0,    97,     0,    98,     0,    96,     0,     0,   179,
+     0,   180,     0,    80,   106,   181,   107,     0,   106,   181,
+   107,     0,   180,   106,   181,   107,     0,   182,     0,   182,
+   109,   102,     0,   182,   109,   102,   109,   182,     0,   183,
+     0,   182,   175,   183,     0,   182,   176,   183,     0,   183,
+   177,   183,     0,   185,   106,   181,   107,     0,   106,   181,
+   107,     0,   186,     0,   186,   184,   186,     0,    61,   184,
+   186,     0,   186,   184,    60,     0,    61,   184,    60,     0,
+   192,     0,   187,     0,   101,     0,   101,   113,     0,   113,
+   101,     0,   113,   101,   113,     0,    80,     0,    46,     0,
+   205,     0,   210,     0,     6,     0,    45,     0,    86,     0,
+    95,    30,   104,   188,   105,     0,   189,     0,   188,   109,
+   189,     0,   102,     0,   210,   178,   190,     0,     0,   191,
+     0,    73,     0,    15,     0,    69,     0,   193,     0,   194,
+     0,   104,   208,   105,     0,   193,   104,   195,   105,     0,
+   196,     0,   195,   109,   196,     0,   114,   197,     0,   114,
+   112,   197,     0,   210,     0,   197,   112,   210,     0,     0,
+   199,     0,    69,     0,    33,   200,     0,   186,     0,   169,
+     0,     0,   104,   201,   168,     0,   104,   105,     0,   104,
+   203,   105,     0,   204,     0,   203,   109,   204,     0,   210,
+     0,   210,   106,   205,   107,     0,   210,   106,   167,   107,
+     0,   205,     0,   102,     0,     9,     0,    10,     0,     0,
+   207,     0,   103,     0,   103,    52,     0,   103,    41,     0,
+    11,     0,    12,     0,    12,     0,     8,     0,   210,     0,
+   210,   207,     0
 };
 
 #endif
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   296,   302,   308,   324,   349,   351,   354,   358,   363,   370,
-   378,   383,   387,   396,   398,   406,   410,   418,   422,   425,
-   428,   432,   452,   454,   462,   466,   498,   502,   511,   518,
-   531,   538,   540,   552,   565,   572,   577,   583,   589,   598,
-   604,   610,   617,   625,   629,   632,   639,   645,   651,   658,
-   667,   677,   685,   693,   695,   707,   719,   726,   742,   752,
-   762,   772,   777,   784,   794,   800,   806,   810,   822,   828,
-   834,   844,   846,   849,   857,   863,   872,   877,   894,   896,
-   901,   905,   910,   915,   921,   925,   950,   957,   962,   970,
-   979,   988,   999,  1003,  1009,  1017,  1041,  1048,  1062,  1071,
-  1081,  1091,  1099,  1120,  1129,  1138,  1139,  1141,  1148,  1160,
-  1170,  1172,  1177,  1181,  1185,  1189,  1192,  1197,  1209,  1225,
-  1236,  1250,  1252,  1253,  1254,  1255,  1256,  1257,  1258,  1259,
-  1260,  1261,  1262,  1268,  1270,  1271,  1274,  1281,  1293,  1295,
-  1299,  1303,  1304,  1305,  1306,  1307,  1311,  1312,  1313,  1314,
-  1318,  1319,  1322,  1329,  1335,  1341,  1349,  1357,  1363,  1379,
-  1379,  1380,  1380,  1381,  1383,  1385,  1388,  1402,  1406,  1411,
-  1415,  1421,  1431,  1435,  1438,  1441,  1446,  1455,  1463,  1469,
-  1476,  1484,  1492,  1501,  1504,  1509,  1511,  1512,  1513,  1516,
-  1520,  1525,  1529,  1540,  1545,  1550,  1557,  1563,  1567,  1572,
-  1578,  1590,  1592,  1595,  1599,  1602,  1607,  1611,  1619,  1634,
-  1640,  1647,  1660,  1672,  1687,  1691,  1708,  1710,  1713,  1717,
-  1723,  1726,  1728,  1728,  1748,  1753,  1758,  1764,  1770,  1778,
-  1786,  1794,  1801,  1811,  1816,  1846,  1848,  1851,  1856,  1860,
-  1866,  1871,  1878,  1885,  1892,  1897
+   298,   304,   310,   326,   351,   353,   356,   360,   365,   372,
+   380,   385,   389,   398,   400,   408,   412,   420,   424,   427,
+   430,   434,   454,   456,   464,   468,   500,   504,   513,   520,
+   533,   540,   542,   554,   567,   574,   579,   585,   591,   600,
+   606,   612,   619,   627,   631,   634,   641,   647,   653,   660,
+   669,   679,   687,   695,   697,   709,   721,   728,   744,   754,
+   764,   774,   779,   786,   796,   802,   808,   812,   824,   830,
+   836,   846,   848,   851,   859,   865,   874,   879,   896,   898,
+   903,   907,   912,   917,   923,   927,   952,   959,   964,   974,
+   982,   991,  1000,  1011,  1015,  1021,  1029,  1053,  1060,  1074,
+  1083,  1093,  1103,  1111,  1132,  1141,  1150,  1151,  1153,  1160,
+  1172,  1182,  1184,  1189,  1193,  1197,  1201,  1204,  1209,  1221,
+  1237,  1248,  1262,  1264,  1265,  1266,  1267,  1268,  1269,  1270,
+  1271,  1272,  1273,  1274,  1280,  1282,  1283,  1286,  1293,  1305,
+  1307,  1311,  1315,  1316,  1317,  1318,  1319,  1323,  1324,  1325,
+  1326,  1330,  1331,  1335,  1344,  1354,  1361,  1367,  1373,  1379,
+  1395,  1395,  1396,  1396,  1397,  1399,  1401,  1406,  1410,  1419,
+  1423,  1428,  1432,  1438,  1448,  1452,  1455,  1458,  1463,  1472,
+  1480,  1486,  1493,  1501,  1509,  1518,  1521,  1526,  1528,  1529,
+  1530,  1533,  1537,  1542,  1546,  1557,  1562,  1567,  1574,  1580,
+  1584,  1589,  1595,  1607,  1609,  1612,  1616,  1619,  1624,  1628,
+  1636,  1651,  1657,  1664,  1677,  1689,  1704,  1708,  1725,  1727,
+  1730,  1734,  1740,  1743,  1745,  1745,  1765,  1770,  1775,  1781,
+  1787,  1795,  1803,  1811,  1818,  1828,  1833,  1863,  1865,  1868,
+  1873,  1877,  1883,  1888,  1895,  1902,  1909,  1914
 };
 #endif
 
@@ -416,17 +417,18 @@
 "ActualParameter","ConstructedDataTypeDefinition","ClassDeclaration","optUnique",
 "ClassFieldList","ClassField","optWithSyntax","WithSyntax","@2","WithSyntaxFormat",
 "WithSyntaxFormatToken","DataTypeMember","ConstrainedTypeDeclaration","ExtensionAndException",
-"TypeDeclaration","ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement",
-"ClassFieldIdentifier","ClassFieldName","ValueDefinition","InlineOrDefinedValue",
-"@3","DefinedValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible",
-"BasicType","BasicString","ConstructedType","Union","Intersection","Except",
-"optConstraints","SetOfConstraints","ElementSetSpecs","ElementSetSpec","ConstraintSubtypeElement",
-"ConstraintRangeSpec","ConstraintSpec","ConstraintValue","WithComponents","WithComponentsList",
-"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint",
-"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement",
-"ComponentIdList","optMarker","Marker","DefaultValue","@4","UniverationDefinition",
-"UniverationList","UniverationElement","SignedNumber","optTag","Tag","TypeRefName",
-"ObjectClassReference","Identifier","TaggedIdentifier", NULL
+"UnconstrainedTypeDeclaration","ComplexTypeReference","ComplexTypeReferenceAmpList",
+"ComplexTypeReferenceElement","ClassFieldIdentifier","ClassFieldName","ValueDefinition",
+"InlineOrDefinedValue","@3","DefinedValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible",
+"BasicType","BasicString","ConstructedTypeConstrained","ConstructedType","Union",
+"Intersection","Except","optConstraints","Constraints","SetOfConstraints","ElementSetSpecs",
+"ElementSetSpec","ConstraintSubtypeElement","ConstraintRangeSpec","ConstraintSpec",
+"ConstraintValue","WithComponents","WithComponentsList","WithComponentsElement",
+"optPresenceConstraint","PresenceConstraint","TableConstraint","SimpleTableConstraint",
+"ComponentRelationConstraint","AtNotationList","AtNotationElement","ComponentIdList",
+"optMarker","Marker","DefaultValue","@4","UniverationDefinition","UniverationList",
+"UniverationElement","SignedNumber","optTag","Tag","TypeRefName","ObjectClassReference",
+"Identifier","TaggedIdentifier", NULL
 };
 #endif
 
@@ -439,23 +441,23 @@
    137,   138,   138,   139,   139,   140,   140,   140,   140,   141,
    141,   142,   142,   142,   143,   143,   144,   144,   145,   145,
    146,   147,   147,   148,   148,   149,   149,   149,   150,   150,
-   152,   151,   153,   153,   154,   154,   155,   155,   156,   157,
-   157,   157,   158,   158,   158,   158,   158,   158,   159,   159,
-   159,   159,   159,   160,   160,   161,   162,   163,   163,   164,
-   166,   165,   165,   165,   165,   165,   165,   167,   167,   168,
-   168,   169,   169,   169,   169,   169,   169,   169,   169,   169,
-   169,   169,   169,   170,   170,   170,   171,   171,   172,   172,
+   152,   151,   153,   153,   154,   154,   155,   155,   156,   156,
+   157,   157,   157,   158,   158,   158,   158,   158,   158,   159,
+   159,   159,   159,   159,   160,   160,   161,   162,   163,   163,
+   164,   166,   165,   165,   165,   165,   165,   165,   167,   167,
+   168,   168,   169,   169,   169,   169,   169,   169,   169,   169,
+   169,   169,   169,   169,   170,   170,   170,   171,   171,   172,
    172,   172,   172,   172,   172,   172,   172,   172,   172,   172,
-   172,   172,   173,   173,   173,   173,   173,   173,   173,   174,
-   174,   175,   175,   176,   177,   177,   177,   178,   178,   179,
-   179,   179,   180,   180,   180,   180,   181,   181,   181,   181,
-   181,   181,   181,   181,   181,   182,   182,   182,   182,   183,
-   183,   184,   184,   184,   184,   184,   185,   186,   186,   187,
-   187,   188,   188,   189,   189,   189,   190,   190,   191,   192,
-   193,   193,   194,   194,   195,   195,   196,   196,   197,   197,
-   198,   198,   199,   198,   200,   200,   201,   201,   202,   202,
-   202,   202,   202,   203,   203,   204,   204,   205,   205,   205,
-   206,   206,   207,   208,   209,   209
+   172,   172,   172,   173,   173,   174,   174,   174,   174,   174,
+   175,   175,   176,   176,   177,   178,   178,   179,   179,   180,
+   180,   181,   181,   181,   182,   182,   182,   182,   183,   183,
+   183,   183,   183,   183,   183,   183,   183,   184,   184,   184,
+   184,   185,   185,   186,   186,   186,   186,   186,   187,   188,
+   188,   189,   189,   190,   190,   191,   191,   191,   192,   192,
+   193,   194,   195,   195,   196,   196,   197,   197,   198,   198,
+   199,   199,   200,   200,   201,   200,   202,   202,   203,   203,
+   204,   204,   204,   204,   204,   205,   205,   206,   206,   207,
+   207,   207,   208,   208,   209,   210,   211,   211
 };
 
 static const short yyr2[] = {     0,
@@ -468,304 +470,300 @@
      3,     1,     3,     3,     1,     3,     1,     1,     1,     3,
      5,     0,     1,     1,     3,     2,     3,     4,     0,     1,
      0,     6,     1,     2,     1,     1,     2,     1,     3,     1,
-     3,     3,     1,     1,     1,     4,     1,     3,     1,     3,
-     3,     1,     3,     1,     3,     1,     1,     1,     1,     4,
-     0,     3,     1,     1,     1,     1,     1,     1,     3,     1,
-     2,     1,     1,     1,     1,     2,     2,     1,     1,     2,
-     2,     1,     1,     1,     1,     2,     1,     2,     1,     1,
+     1,     3,     3,     1,     1,     1,     4,     1,     3,     1,
+     3,     3,     1,     3,     1,     3,     1,     1,     1,     1,
+     4,     0,     3,     1,     1,     1,     1,     1,     1,     3,
+     1,     2,     1,     1,     1,     1,     2,     2,     1,     1,
+     2,     2,     1,     1,     1,     1,     2,     1,     2,     1,
      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     1,     1,     4,     4,     4,     4,     4,     1,     4,     1,
-     1,     1,     1,     1,     0,     1,     4,     3,     4,     1,
-     3,     5,     1,     3,     3,     3,     4,     3,     1,     3,
-     3,     3,     3,     1,     1,     1,     2,     2,     3,     1,
-     1,     1,     1,     1,     1,     1,     5,     1,     3,     1,
-     3,     0,     1,     1,     1,     1,     1,     1,     3,     4,
-     1,     3,     2,     3,     1,     3,     0,     1,     1,     2,
-     1,     1,     0,     3,     2,     3,     1,     3,     1,     4,
-     4,     1,     1,     1,     1,     0,     1,     1,     2,     2,
-     1,     1,     1,     1,     1,     2
+     1,     1,     1,     4,     4,     4,     4,     4,     1,     4,
+     1,     1,     1,     1,     1,     0,     1,     1,     4,     3,
+     4,     1,     3,     5,     1,     3,     3,     3,     4,     3,
+     1,     3,     3,     3,     3,     1,     1,     1,     2,     2,
+     3,     1,     1,     1,     1,     1,     1,     1,     5,     1,
+     3,     1,     3,     0,     1,     1,     1,     1,     1,     1,
+     3,     4,     1,     3,     2,     3,     1,     3,     0,     1,
+     1,     2,     1,     1,     0,     3,     2,     3,     1,     3,
+     1,     4,     4,     1,     1,     1,     1,     0,     1,     1,
+     2,     2,     1,     1,     1,     1,     1,     2
 };
 
 static const short yydefact[] = {     0,
-   241,   242,     1,     2,     5,     3,     0,     0,     6,   244,
+   243,   244,     1,     2,     5,     3,     0,     0,     6,   246,
     13,     8,     0,     9,    11,    14,     7,    10,     0,     0,
      0,     0,     0,     0,     0,    15,    16,     0,    22,    20,
-    18,    21,    19,     0,    17,    12,    23,   139,     0,     0,
-   140,   141,   142,     0,   143,   144,   152,   145,   146,   147,
-   148,   149,   150,   151,     0,    24,    25,    27,    28,    31,
+    18,    21,    19,     0,    17,    12,    23,   140,     0,     0,
+   141,   142,   143,     0,   144,   145,   153,   146,   147,   148,
+   149,   150,   151,   152,     0,    24,    25,    27,    28,    31,
     29,    30,    34,     0,     0,    32,     0,    46,     0,    47,
     49,    50,    36,     0,    37,     0,    40,    42,    43,     4,
-    26,   236,    99,   243,     0,   122,     0,     0,   135,   129,
-   133,   134,   123,     0,     0,   124,   128,   132,     0,     0,
-    52,    53,   125,   102,     0,    33,    45,    44,     0,    35,
-    38,     0,     0,     0,   238,    58,     0,   237,     0,   136,
-   131,   130,   127,   126,     0,    60,     0,    62,     0,     0,
-     0,    48,     5,    41,     0,   240,   239,    99,   243,   158,
-     0,     0,   165,   165,    56,    57,   165,    97,   137,   125,
-    93,    94,    95,     0,   100,   101,     0,     0,     0,     0,
-    54,   108,   109,   103,   104,   106,   113,   115,   114,   234,
-   235,   111,   110,   117,   116,     0,   118,    39,     0,    74,
-   217,   107,     0,     0,     0,     0,     0,     0,     0,   166,
-     0,     0,   217,     0,   138,     0,     0,    61,    64,    63,
-   194,   195,   191,     0,   190,   196,     0,     0,     0,     0,
-    55,   170,   173,     0,   179,   185,   184,   207,   208,   192,
-   193,     0,     0,     0,    79,     0,     0,   219,    72,   217,
-    76,   218,     0,    90,     0,    69,    88,   245,     0,    98,
-     0,     0,     0,     0,     0,     0,     0,    89,   233,   225,
-     0,   227,   232,   229,     0,    65,    67,    68,    59,   186,
-     0,     0,     0,     0,     0,    51,   162,   163,   160,   161,
-     0,     0,     0,   164,     0,     0,     0,     0,   105,   120,
-   112,   119,     0,    71,    80,    75,   223,   222,   221,   220,
-    73,    77,    72,   159,     0,   153,     0,   246,    87,     0,
-   154,   168,   156,     0,   155,   157,   226,     0,     0,    96,
-     0,   187,   188,   183,   181,     0,   209,   178,   171,   174,
-   175,   176,     0,   182,   180,     0,     0,   211,   121,     0,
-     0,    78,    91,    92,    70,   167,   169,   228,     0,     0,
-    66,   189,   200,     0,   198,   165,     0,   177,     0,   213,
-   215,   210,     0,    81,   224,   231,   230,   197,     0,   202,
-   172,   214,     0,   212,     0,   199,   205,   206,   204,   201,
-   203,   216,    85,     0,    83,    86,    82,    84,     0,     0,
-     0
+    26,   238,   100,   245,     0,   123,     0,     0,   136,   130,
+   134,   135,   124,     0,     0,   125,   129,   133,     0,     0,
+    52,    53,   126,   103,     0,    33,    45,    44,     0,    35,
+    38,     0,     0,     0,   240,    58,     0,   239,     0,   137,
+   132,   131,   128,   127,     0,    60,     0,    62,     0,     0,
+     0,    48,     5,    41,     0,   242,   241,   100,   245,   159,
+     0,     0,   166,   166,    56,    57,   166,    98,   138,   126,
+    94,    95,    90,    96,     0,   101,   102,     0,     0,     0,
+     0,    54,   109,   110,   104,   105,   107,   114,   116,   115,
+   236,   237,   112,   111,   118,   117,     0,   119,    39,     0,
+    74,   219,   108,     0,     0,     0,     0,     0,     0,     0,
+   167,   168,     0,     0,   219,     0,   139,     0,     0,    61,
+    64,    63,   196,   197,   193,     0,   192,   198,     0,     0,
+     0,     0,    55,   172,   175,     0,   181,   187,   186,   209,
+   210,   194,   195,     0,     0,     0,    79,     0,     0,   221,
+    72,   219,    76,   220,     0,    91,     0,    69,    88,   247,
+     0,    99,     0,     0,     0,     0,     0,     0,     0,    89,
+   235,   227,     0,   229,   234,   231,     0,     0,     0,    65,
+    67,    68,    59,   188,     0,     0,     0,     0,     0,    51,
+   163,   164,   161,   162,     0,     0,     0,   165,     0,     0,
+     0,     0,   106,   121,   113,   120,     0,    71,    80,    75,
+   225,   224,   223,   222,    73,    77,    72,   160,     0,   156,
+     0,   248,    87,     0,   157,   170,   154,     0,   158,   155,
+   228,     0,     0,    97,     0,   189,   190,   185,   183,     0,
+   211,   180,   173,   176,   177,   178,     0,   184,   182,     0,
+     0,   213,   122,     0,     0,    78,    92,    93,    70,   169,
+   171,   230,     0,     0,    66,   191,   202,     0,   200,   166,
+     0,   179,     0,   215,   217,   212,     0,    81,   226,   233,
+   232,   199,     0,   204,   174,   216,     0,   214,     0,   201,
+   207,   208,   206,   203,   205,   218,    85,     0,    83,    86,
+    82,    84,     0,     0,     0
 };
 
-static const short yydefgoto[] = {   379,
+static const short yydefgoto[] = {   383,
      3,     4,     8,     9,    13,    14,    25,    26,    27,    55,
     56,    57,   106,    58,    74,    75,    76,    77,    59,    69,
-    70,    60,   100,   210,    61,   125,   126,   255,   256,   235,
-   116,   292,   179,   180,   284,   285,   365,   374,   375,   236,
-   146,   237,   147,   148,   164,   165,   181,   182,    62,   173,
-   223,   174,   281,   149,   150,   151,   152,   153,   272,   273,
-   275,   189,   190,   211,   212,   213,   262,   214,   215,   216,
-   344,   345,   370,   371,   217,   218,   219,   327,   328,   350,
-   231,   232,   290,   331,   195,   251,   252,   220,   117,   118,
-   154,   104,   221,   239
+    70,    60,   100,   212,    61,   125,   126,   259,   260,   237,
+   116,   296,   180,   181,   288,   289,   369,   378,   379,   238,
+   146,   239,   147,   148,   165,   166,   182,   183,    62,   174,
+   225,   175,   285,   149,   150,   151,   152,   153,   154,   276,
+   277,   279,   190,   191,   192,   213,   214,   215,   266,   216,
+   217,   218,   348,   349,   374,   375,   219,   220,   221,   331,
+   332,   354,   233,   234,   294,   335,   197,   253,   254,   222,
+   117,   118,   155,   104,   223,   241
 };
 
-static const short yypact[] = {    41,
--32768,-32768,    41,-32768,   -62,-32768,    10,    54,-32768,-32768,
--32768,-32768,    20,-32768,   -20,    44,-32768,-32768,    95,    78,
-    72,    83,    45,   112,   187,    44,-32768,    94,-32768,-32768,
--32768,-32768,-32768,   189,-32768,-32768,   398,-32768,   223,    23,
--32768,-32768,-32768,    57,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,   201,   398,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   194,   696,-32768,   140,-32768,    53,-32768,
--32768,-32768,-32768,    47,-32768,   -25,-32768,-32768,-32768,-32768,
--32768,    -8,   138,-32768,   173,-32768,   185,   196,-32768,-32768,
--32768,-32768,-32768,   209,   188,-32768,-32768,-32768,   713,   265,
--32768,-32768,-32768,   160,   271,-32768,-32768,-32768,   157,-32768,
--32768,    41,   157,   174,   108,-32768,   559,-32768,   157,-32768,
--32768,-32768,-32768,-32768,    90,-32768,   169,   171,   176,   137,
-    71,-32768,   -62,-32768,   137,-32768,-32768,    59,   178,   248,
-   180,   218,    42,    60,-32768,-32768,   -33,-32768,-32768,   183,
--32768,-32768,-32768,   190,-32768,-32768,   289,   713,   287,   287,
-   133,-32768,-32768,   193,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   203,-32768,-32768,    93,-32768,
-   482,-32768,   272,     9,   170,   200,     9,   133,   231,   202,
-     9,   232,    30,    52,-32768,   337,   636,-32768,-32768,-32768,
--32768,-32768,-32768,   -69,-32768,-32768,   283,    41,   133,   211,
--32768,   124,   221,   212,   -69,-32768,-32768,   216,-32768,-32768,
--32768,   137,   317,   287,   227,   137,   267,-32768,   235,    30,
--32768,-32768,   287,   213,    98,-32768,-32768,   224,   636,-32768,
-   133,   103,   219,   636,   133,   106,   636,-32768,-32768,-32768,
-   120,-32768,-32768,   222,   122,-32768,-32768,-32768,-32768,   220,
-   228,    84,   233,   226,   229,-32768,-32768,-32768,-32768,-32768,
-   236,   133,   133,-32768,   133,   133,   128,   225,-32768,-32768,
-   331,-32768,   258,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,   235,-32768,   234,-32768,     9,-32768,-32768,   239,
--32768,-32768,-32768,   240,-32768,-32768,-32768,    14,   234,-32768,
-   337,-32768,   237,-32768,-32768,    19,-32768,-32768,   242,-32768,
--32768,-32768,   247,-32768,-32768,     7,   127,-32768,-32768,   253,
-   317,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   255,   259,
--32768,-32768,-32768,   142,-32768,   -33,   133,-32768,   287,   256,
--32768,-32768,   225,-32768,   331,-32768,-32768,-32768,    19,    28,
-   165,   256,   287,-32768,   179,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,    12,-32768,-32768,-32768,-32768,   341,   365,
--32768
+static const short yypact[] = {    62,
+-32768,-32768,    62,-32768,   -36,-32768,    11,    56,-32768,-32768,
+-32768,-32768,    26,-32768,   -13,   202,-32768,-32768,    87,    52,
+    66,    99,   108,   101,   116,   202,-32768,    81,-32768,-32768,
+-32768,-32768,-32768,   149,-32768,-32768,   375,-32768,   185,    10,
+-32768,-32768,-32768,    58,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   163,   375,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   140,   673,-32768,    96,-32768,    86,-32768,
+-32768,-32768,-32768,    20,-32768,    -4,-32768,-32768,-32768,-32768,
+-32768,   -11,    98,-32768,   134,-32768,   137,   156,-32768,-32768,
+-32768,-32768,-32768,   187,   139,-32768,-32768,-32768,   690,   269,
+-32768,-32768,-32768,   165,   272,-32768,-32768,-32768,   218,-32768,
+-32768,    62,   218,   179,    94,-32768,   536,-32768,   218,-32768,
+-32768,-32768,-32768,-32768,   -65,-32768,   175,   176,   183,   199,
+    53,-32768,   -36,-32768,   199,-32768,-32768,    70,   184,   255,
+   192,   229,    61,    65,-32768,-32768,   -27,-32768,-32768,   194,
+-32768,-32768,-32768,-32768,   195,-32768,-32768,   301,   690,   299,
+   299,   215,-32768,-32768,   197,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,   203,-32768,-32768,    63,
+-32768,   459,-32768,   286,    21,   235,   210,    21,   215,   250,
+-32768,   214,    21,   256,    15,    42,-32768,   314,   613,-32768,
+-32768,-32768,-32768,-32768,-32768,   -12,-32768,-32768,   297,    62,
+   215,   223,-32768,   142,   233,   225,   -12,-32768,-32768,   230,
+-32768,-32768,-32768,   199,   329,   299,   240,   199,   226,-32768,
+   251,    15,-32768,-32768,   299,   231,    91,-32768,-32768,   241,
+   613,-32768,   215,   128,   236,   613,   215,   144,   613,-32768,
+-32768,-32768,   158,-32768,-32768,   239,   243,   244,   159,-32768,
+-32768,-32768,-32768,   238,   248,    77,   249,   252,   245,-32768,
+-32768,-32768,-32768,-32768,   253,   215,   215,-32768,   215,   215,
+    89,   254,-32768,-32768,   355,-32768,   283,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,   251,-32768,   247,-32768,
+    21,-32768,-32768,   259,-32768,-32768,-32768,   260,-32768,-32768,
+-32768,    46,   247,-32768,   314,-32768,   258,-32768,-32768,    28,
+-32768,-32768,   265,-32768,-32768,-32768,   262,-32768,-32768,    -1,
+   160,-32768,-32768,   271,   329,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,   275,   277,-32768,-32768,-32768,   169,-32768,   -27,
+   215,-32768,   299,   264,-32768,-32768,   254,-32768,   355,-32768,
+-32768,-32768,    28,     8,   182,   264,   299,-32768,   125,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,    12,-32768,-32768,
+-32768,-32768,   385,   389,-32768
 };
 
 static const short yypgoto[] = {-32768,
--32768,   364,   241,-32768,-32768,   356,-32768,-32768,   344,-32768,
--32768,   316,-32768,-32768,-32768,   301,-32768,   263,-32768,-32768,
-   269,-32768,   314,-32768,-32768,-32768,   230,-32768,    69,    62,
--32768,    96,-32768,   156,-32768,-32768,-32768,-32768,    16,    86,
-  -131,-32768,  -193,   -55,-32768,   172,  -174,   -94,-32768,-32768,
--32768,  -162,    61,   -53,   -51,-32768,    89,-32768,-32768,-32768,
--32768,  -142,-32768,  -118,    50,   -17,   184,-32768,  -188,-32768,
--32768,    32,-32768,-32768,-32768,-32768,-32768,-32768,    55,    49,
-  -121,-32768,-32768,-32768,-32768,-32768,    97,  -123,-32768,   181,
-     1,-32768,    -7,-32768
+-32768,   391,   263,-32768,-32768,   382,-32768,-32768,   374,-32768,
+-32768,   345,-32768,-32768,-32768,   328,-32768,   290,-32768,-32768,
+   300,-32768,   346,-32768,-32768,-32768,   257,-32768,    95,   -67,
+-32768,   115,-32768,   186,-32768,-32768,-32768,-32768,    37,   117,
+   -40,-32768,  -188,   -50,-32768,   196,  -179,   -91,-32768,-32768,
+-32768,  -219,    84,   -56,   -52,-32768,    35,-32768,-32768,-32768,
+-32768,-32768,  -142,-32768,-32768,  -165,    71,  -121,   204,-32768,
+  -141,-32768,-32768,    64,-32768,-32768,-32768,-32768,-32768,-32768,
+    69,    75,  -124,-32768,-32768,-32768,-32768,-32768,   118,  -120,
+-32768,   191,     1,-32768,    -7,-32768
 };
 
 
-#define	YYLAST		804
+#define	YYLAST		781
 
 
 static const short yytable[] = {    15,
-     5,   192,   257,     5,   193,    15,   230,   175,   101,   101,
-   102,   102,   103,   103,    10,   373,    10,    10,    11,   114,
-   112,    10,   170,   171,   162,   163,    10,    10,    11,    65,
-    10,   260,    72,     1,     2,   166,    79,    64,   289,    67,
-    71,     7,   367,   261,    78,   127,   186,   103,    65,   229,
-   303,     1,     2,   306,    10,    20,    64,     1,     2,    10,
-   170,   171,   227,    21,    10,   259,    79,     1,     2,   243,
-   253,   248,   188,   315,    78,   167,   168,   169,    10,   170,
-   171,     1,     2,   113,    22,    19,    23,    16,   325,   201,
-   265,    10,   170,   171,   115,    24,   368,    32,   228,   128,
-   369,    72,    73,    28,   127,    79,   103,   299,   293,    71,
-   234,   156,   133,    78,    12,   249,   377,   257,   349,   155,
-   343,   186,   300,   177,    17,    63,   304,   166,   202,   240,
-    68,   176,   333,   201,    29,    10,   170,   171,   201,   186,
-    10,   170,   171,   314,    63,   187,   339,   188,   136,   162,
-   163,   199,   200,   249,   110,    30,   250,   323,   128,   137,
-   108,   109,  -241,   191,    10,   188,    31,     1,     2,   206,
-   119,   334,   202,   288,   172,   103,   238,   202,   203,   238,
-    83,    84,   373,   238,   253,   340,   254,   324,   258,    34,
-   376,   162,   163,   204,   157,    33,    82,   225,   158,   376,
-    36,   226,   296,   360,    83,    84,   297,   301,   264,    37,
-   305,   297,   205,   206,   297,    85,   282,    86,   206,    87,
-   267,   268,   269,   270,   307,   294,   310,   207,   308,    88,
-   311,   352,   271,    89,    66,   353,   208,    90,   209,    80,
-    91,    10,   170,   171,     1,     2,   358,   107,   242,   119,
-   359,    92,   246,   120,   320,   321,    93,   322,    94,   123,
-    95,   267,   268,   269,   270,   121,   122,   129,   124,    96,
-    97,   130,   201,   131,    10,   170,   171,   135,   159,   161,
-   160,  -242,   183,   184,    98,   185,   194,   177,    85,   238,
-    86,   197,    87,   196,    10,   176,   233,    99,   244,   247,
-   254,   177,    88,   258,   222,   241,    89,   245,   346,   176,
-    90,   202,   263,    91,   224,   266,   274,   276,   351,   278,
-   280,   283,   291,   295,    92,   302,   115,   309,   313,    93,
-   317,    94,   312,    95,   329,   318,   316,   319,   326,   330,
-   380,   351,    96,    97,    10,   336,   337,   138,   139,   342,
-   347,   346,   206,   348,   140,   372,   354,    98,    85,    38,
-    86,   356,    87,   141,   381,   357,     6,   363,    18,    35,
-   287,    81,    88,   178,   111,   134,    89,   132,   105,   341,
-    90,   286,   335,    91,    41,    42,    43,   198,   332,   378,
-   366,   355,   142,   279,    92,    45,   361,   362,   277,    93,
-    46,    94,    47,    95,   338,    10,     0,   364,     1,     2,
-    48,     0,    96,    97,   143,   144,     0,     0,   298,    49,
-    38,    50,     0,     0,     0,     0,    51,    98,    52,    53,
-    54,     0,     0,     0,     0,    39,     0,     0,     0,    40,
-     0,     0,     0,     0,     0,    41,    42,    43,     0,     0,
-     0,    44,     0,     0,     0,     0,    45,     0,     0,     0,
-     0,    46,     0,    47,     0,     0,     0,     0,     0,     0,
-     0,    48,     0,     0,     0,     0,     0,     0,     0,     0,
-    49,     0,    50,     0,     0,     0,     0,    51,     0,    52,
-    53,    54,   138,   139,   162,   163,     0,     0,     0,   140,
-     0,     0,     0,    85,    38,    86,     0,    87,   141,     0,
-     0,     0,     0,     0,   227,     0,     0,    88,     0,     0,
-     0,    89,     0,     0,     0,    90,     0,     0,    91,    41,
-    42,    43,     0,     0,     0,     0,     0,   142,     0,    92,
-    45,     0,     0,     0,    93,    46,    94,    47,    95,     0,
-   228,     0,     0,     0,     0,    48,     0,    96,    97,   143,
-   144,     0,     0,     0,    49,     0,    50,     0,     0,   138,
-   139,    51,    98,    52,    53,    54,   140,     0,     0,     0,
+     5,   194,   232,     5,   195,    15,    10,   102,   102,   261,
+   176,   103,   103,   101,   101,   377,   114,    10,    10,    11,
+     1,     2,   371,   245,   163,   164,    67,    10,    10,    65,
+     1,     2,    72,    10,    11,    10,    79,    64,   167,   158,
+    71,   112,   127,   159,    78,   269,   103,   229,    65,    10,
+   171,   172,   187,    10,   171,   172,    64,   168,   169,   170,
+    10,   171,   172,     1,     2,    10,    79,     7,     1,     2,
+   250,    63,     1,     2,    78,   255,   372,   304,   189,   337,
+   373,   308,   203,   230,    10,   171,   172,   293,   264,    16,
+    63,   115,    19,   343,   203,    28,    10,   171,   172,   128,
+   265,    72,   127,    73,   113,    79,   103,   297,    29,    71,
+   353,   157,   133,    78,   327,    12,   381,    68,    34,   156,
+   244,   204,   236,   178,   319,   248,   261,   110,   377,   347,
+    17,   177,   167,   204,   136,   242,   318,   163,   164,   329,
+   187,   231,    82,   251,   187,   137,   252,   251,   328,    30,
+    83,    84,   201,   202,   324,   325,   173,   326,   263,   128,
+    32,    85,   208,    86,   188,    87,   189,   227,   193,    37,
+   189,   228,   292,  -243,   208,    88,   103,   240,   338,    89,
+   240,   119,    31,    90,    33,   240,    91,    36,   256,   380,
+   262,   255,   344,   108,   109,   300,    66,    92,   380,   301,
+   303,    80,    93,   107,    94,   307,    95,   364,   310,   119,
+   268,   163,   164,    20,   120,    96,    97,   121,   286,   124,
+   203,    21,    10,   171,   172,    10,   122,   298,     1,     2,
+    98,   203,   305,    10,   171,   172,   301,   123,   271,   272,
+   273,   274,    22,    99,    23,    83,    84,    85,   309,    86,
+   275,    87,   301,    24,    10,   171,   172,     1,     2,   204,
+   205,    88,   311,   314,   356,    89,   312,   315,   357,    90,
+   204,   129,    91,   362,   131,   206,   130,   363,   271,   272,
+   273,   274,   135,    92,   160,   161,   162,  -244,    93,   184,
+    94,   178,    95,   240,   207,   185,   186,   196,   198,   177,
+   208,    96,    97,   199,   256,   178,    10,   262,   224,   209,
+   235,   208,   350,   177,   226,   243,    98,   246,   210,   247,
+   211,    10,   355,   249,   138,   139,   267,   270,   278,   291,
+   280,   140,   284,   282,   287,    85,    38,    86,   295,    87,
+   141,   299,   306,   115,   313,   355,   188,   193,   317,    88,
+   316,   322,   320,    89,   323,   350,   321,    90,   333,   376,
+    91,    41,    42,    43,   334,   340,   341,   330,   352,   142,
+   346,    92,    45,   351,   358,   367,    93,    46,    94,    47,
+    95,   360,    10,   361,   384,     1,     2,    48,   385,    96,
+    97,   257,   258,     6,    18,   179,    49,    38,    50,    35,
+    81,   111,   134,    51,    98,    52,    53,    54,   132,   345,
+   105,   336,    39,   290,   382,   200,    40,   339,   359,   283,
+   281,   365,    41,    42,    43,   368,   370,   366,    44,   342,
+   302,     0,     0,    45,     0,     0,     0,     0,    46,     0,
+    47,     0,     0,     0,     0,     0,     0,     0,    48,     0,
+     0,     0,     0,     0,     0,     0,     0,    49,     0,    50,
+     0,     0,     0,     0,    51,     0,    52,    53,    54,   138,
+   139,   163,   164,     0,     0,     0,   140,     0,     0,     0,
     85,    38,    86,     0,    87,   141,     0,     0,     0,     0,
-     0,     0,     0,     0,    88,     0,     0,     0,    89,     0,
+     0,   229,     0,     0,    88,     0,     0,     0,    89,     0,
      0,     0,    90,     0,     0,    91,    41,    42,    43,     0,
      0,     0,     0,     0,   142,     0,    92,    45,     0,     0,
-     0,    93,    46,    94,    47,    95,     0,     0,     0,     0,
+     0,    93,    46,    94,    47,    95,     0,   230,     0,     0,
      0,     0,    48,     0,    96,    97,   143,   144,     0,     0,
-     0,    49,     0,    50,     0,   145,   138,   139,    51,    98,
+     0,    49,     0,    50,     0,     0,   138,   139,    51,    98,
     52,    53,    54,   140,     0,     0,     0,    85,    38,    86,
      0,    87,   141,     0,     0,     0,     0,     0,     0,     0,
      0,    88,     0,     0,     0,    89,     0,     0,     0,    90,
      0,     0,    91,    41,    42,    43,     0,     0,     0,     0,
      0,   142,     0,    92,    45,     0,     0,     0,    93,    46,
-    94,    47,    95,     0,     0,     0,    83,    84,     0,    48,
-     0,    96,    97,   143,   144,     0,     0,    85,    49,    86,
-    50,    87,     0,     1,     2,    51,    98,    52,    53,    54,
-     0,    88,     0,     0,    85,    89,    86,     0,    87,    90,
-     0,     0,    91,     0,     0,     0,     0,     0,    88,     0,
-     0,     0,    89,    92,     0,     0,    90,     0,    93,    91,
-    94,     0,    95,     0,     0,     0,     0,     0,     0,     0,
-    92,    96,    97,     0,     0,    93,     0,    94,     0,    95,
-     0,     0,     0,     0,     0,     0,    98,     0,    96,    97,
+    94,    47,    95,     0,     0,     0,     0,     0,     0,    48,
+     0,    96,    97,   143,   144,     0,     0,     0,    49,     0,
+    50,     0,   145,   138,   139,    51,    98,    52,    53,    54,
+   140,     0,     0,     0,    85,    38,    86,     0,    87,   141,
+     0,     0,     0,     0,     0,     0,     0,     0,    88,     0,
+     0,     0,    89,     0,     0,     0,    90,     0,     0,    91,
+    41,    42,    43,     0,     0,     0,     0,     0,   142,     0,
+    92,    45,     0,     0,     0,    93,    46,    94,    47,    95,
+     0,     0,     0,    83,    84,     0,    48,     0,    96,    97,
+   143,   144,     0,     0,    85,    49,    86,    50,    87,     0,
+     1,     2,    51,    98,    52,    53,    54,     0,    88,     0,
+     0,    85,    89,    86,     0,    87,    90,     0,     0,    91,
+     0,     0,     0,     0,     0,    88,     0,     0,     0,    89,
+    92,     0,     0,    90,     0,    93,    91,    94,     0,    95,
+     0,     0,     0,     0,     0,     0,     0,    92,    96,    97,
+     0,     0,    93,     0,    94,     0,    95,     0,     0,     0,
+     0,     0,     0,    98,     0,    96,    97,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    98
+    98
 };
 
 static const short yycheck[] = {     7,
-     0,   144,   196,     3,   147,    13,   181,   131,    64,    65,
-    64,    65,    64,    65,     8,     4,     8,     8,     9,    28,
-    46,     8,     9,    10,    13,    14,     8,     8,     9,    37,
-     8,   101,    40,    11,    12,   130,    44,    37,   227,    17,
-    40,   104,    15,   113,    44,    99,    80,    99,    56,   181,
-   244,    11,    12,   247,     8,    12,    56,    11,    12,     8,
-     9,    10,    33,    20,     8,   197,    74,    11,    12,   188,
-   194,   193,   106,   262,    74,     5,     6,     7,     8,     9,
-    10,    11,    12,   109,    41,   106,    43,    34,   277,     6,
-   209,     8,     9,    10,   103,    52,    69,    53,    69,    99,
-    73,   109,    46,     9,   158,   113,   158,   239,   230,   109,
-   102,   119,   112,   113,   105,   102,   105,   311,   112,   119,
-   102,    80,   241,   131,   105,    37,   245,   222,    45,   185,
-   108,   131,   295,     6,    57,     8,     9,    10,     6,    80,
-     8,     9,    10,    60,    56,   104,   309,   106,    41,    13,
-    14,   159,   160,   102,   108,    84,   105,   276,   158,    52,
-   108,   109,   104,   104,     8,   106,    84,    11,    12,    86,
-   112,   295,    45,   227,   104,   227,   184,    45,    46,   187,
-    11,    12,     4,   191,   308,   309,   194,    60,   196,     3,
-   365,    13,    14,    61,   105,    84,     3,   105,   109,   374,
-   107,   109,   105,   346,    11,    12,   109,   105,   208,    21,
-   105,   109,    80,    86,   109,    22,   224,    24,    86,    26,
-    97,    98,    99,   100,   105,   233,   105,    95,   109,    36,
-   109,   105,   109,    40,    12,   109,   104,    44,   106,    39,
-    47,     8,     9,    10,    11,    12,   105,   108,   187,   112,
-   109,    58,   191,    81,   272,   273,    63,   275,    65,    51,
-    67,    97,    98,    99,   100,    81,    71,     3,    81,    76,
-    77,   112,     6,     3,     8,     9,    10,   104,   110,   104,
-   110,   104,    35,   104,    91,    68,   104,   295,    22,   297,
-    24,     3,    26,   104,     8,   295,    25,   104,    68,    68,
-   308,   309,    36,   311,   112,   106,    40,   106,   316,   309,
-    44,    45,    30,    47,   112,   105,    96,   106,   326,   104,
-     4,    95,    88,   111,    58,   107,   103,   106,   101,    63,
-   105,    65,   113,    67,     4,   107,   104,   102,   114,    82,
-     0,   349,    76,    77,     8,   107,   107,    11,    12,   113,
-   109,   359,    86,   107,    18,   363,   104,    91,    22,    23,
-    24,   107,    26,    27,     0,   107,     3,   112,    13,    26,
-   104,    56,    36,   133,    74,   113,    40,   109,    65,   311,
-    44,   226,   297,    47,    48,    49,    50,   158,   293,   374,
-   359,   331,    56,   222,    58,    59,   347,   349,   215,    63,
-    64,    65,    66,    67,   308,     8,    -1,   353,    11,    12,
-    74,    -1,    76,    77,    78,    79,    -1,    -1,   238,    83,
-    23,    85,    -1,    -1,    -1,    -1,    90,    91,    92,    93,
-    94,    -1,    -1,    -1,    -1,    38,    -1,    -1,    -1,    42,
-    -1,    -1,    -1,    -1,    -1,    48,    49,    50,    -1,    -1,
-    -1,    54,    -1,    -1,    -1,    -1,    59,    -1,    -1,    -1,
-    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    83,    -1,    85,    -1,    -1,    -1,    -1,    90,    -1,    92,
-    93,    94,    11,    12,    13,    14,    -1,    -1,    -1,    18,
-    -1,    -1,    -1,    22,    23,    24,    -1,    26,    27,    -1,
-    -1,    -1,    -1,    -1,    33,    -1,    -1,    36,    -1,    -1,
-    -1,    40,    -1,    -1,    -1,    44,    -1,    -1,    47,    48,
-    49,    50,    -1,    -1,    -1,    -1,    -1,    56,    -1,    58,
-    59,    -1,    -1,    -1,    63,    64,    65,    66,    67,    -1,
-    69,    -1,    -1,    -1,    -1,    74,    -1,    76,    77,    78,
-    79,    -1,    -1,    -1,    83,    -1,    85,    -1,    -1,    11,
-    12,    90,    91,    92,    93,    94,    18,    -1,    -1,    -1,
+     0,   144,   182,     3,   147,    13,     8,    64,    65,   198,
+   131,    64,    65,    64,    65,     4,    28,     8,     8,     9,
+    11,    12,    15,   189,    13,    14,    17,     8,     8,    37,
+    11,    12,    40,     8,     9,     8,    44,    37,   130,   105,
+    40,    46,    99,   109,    44,   211,    99,    33,    56,     8,
+     9,    10,    80,     8,     9,    10,    56,     5,     6,     7,
+     8,     9,    10,    11,    12,     8,    74,   104,    11,    12,
+   195,    37,    11,    12,    74,   196,    69,   243,   106,   299,
+    73,   247,     6,    69,     8,     9,    10,   229,   101,    34,
+    56,   103,   106,   313,     6,     9,     8,     9,    10,    99,
+   113,   109,   159,    46,   109,   113,   159,   232,    57,   109,
+   112,   119,   112,   113,   280,   105,   105,   108,     3,   119,
+   188,    45,   102,   131,   266,   193,   315,   108,     4,   102,
+   105,   131,   224,    45,    41,   186,    60,    13,    14,   281,
+    80,   182,     3,   102,    80,    52,   105,   102,    60,    84,
+    11,    12,   160,   161,   276,   277,   104,   279,   199,   159,
+    53,    22,    86,    24,   104,    26,   106,   105,   104,    21,
+   106,   109,   229,   104,    86,    36,   229,   185,   299,    40,
+   188,   112,    84,    44,    84,   193,    47,   107,   196,   369,
+   198,   312,   313,   108,   109,   105,    12,    58,   378,   109,
+   241,    39,    63,   108,    65,   246,    67,   350,   249,   112,
+   210,    13,    14,    12,    81,    76,    77,    81,   226,    81,
+     6,    20,     8,     9,    10,     8,    71,   235,    11,    12,
+    91,     6,   105,     8,     9,    10,   109,    51,    97,    98,
+    99,   100,    41,   104,    43,    11,    12,    22,   105,    24,
+   109,    26,   109,    52,     8,     9,    10,    11,    12,    45,
+    46,    36,   105,   105,   105,    40,   109,   109,   109,    44,
+    45,     3,    47,   105,     3,    61,   112,   109,    97,    98,
+    99,   100,   104,    58,   110,   110,   104,   104,    63,    35,
+    65,   299,    67,   301,    80,   104,    68,   104,   104,   299,
+    86,    76,    77,     3,   312,   313,     8,   315,   112,    95,
+    25,    86,   320,   313,   112,   106,    91,    68,   104,   106,
+   106,     8,   330,    68,    11,    12,    30,   105,    96,   104,
+   106,    18,     4,   104,    95,    22,    23,    24,    88,    26,
+    27,   111,   107,   103,   106,   353,   104,   104,   101,    36,
+   113,   107,   104,    40,   102,   363,   105,    44,     4,   367,
+    47,    48,    49,    50,    82,   107,   107,   114,   107,    56,
+   113,    58,    59,   109,   104,   112,    63,    64,    65,    66,
+    67,   107,     8,   107,     0,    11,    12,    74,     0,    76,
+    77,    78,    79,     3,    13,   133,    83,    23,    85,    26,
+    56,    74,   113,    90,    91,    92,    93,    94,   109,   315,
+    65,   297,    38,   228,   378,   159,    42,   301,   335,   224,
+   217,   351,    48,    49,    50,   357,   363,   353,    54,   312,
+   240,    -1,    -1,    59,    -1,    -1,    -1,    -1,    64,    -1,
+    66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    74,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,    -1,    85,
+    -1,    -1,    -1,    -1,    90,    -1,    92,    93,    94,    11,
+    12,    13,    14,    -1,    -1,    -1,    18,    -1,    -1,    -1,
     22,    23,    24,    -1,    26,    27,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    40,    -1,
+    -1,    33,    -1,    -1,    36,    -1,    -1,    -1,    40,    -1,
     -1,    -1,    44,    -1,    -1,    47,    48,    49,    50,    -1,
     -1,    -1,    -1,    -1,    56,    -1,    58,    59,    -1,    -1,
-    -1,    63,    64,    65,    66,    67,    -1,    -1,    -1,    -1,
+    -1,    63,    64,    65,    66,    67,    -1,    69,    -1,    -1,
     -1,    -1,    74,    -1,    76,    77,    78,    79,    -1,    -1,
-    -1,    83,    -1,    85,    -1,    87,    11,    12,    90,    91,
+    -1,    83,    -1,    85,    -1,    -1,    11,    12,    90,    91,
     92,    93,    94,    18,    -1,    -1,    -1,    22,    23,    24,
     -1,    26,    27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    36,    -1,    -1,    -1,    40,    -1,    -1,    -1,    44,
     -1,    -1,    47,    48,    49,    50,    -1,    -1,    -1,    -1,
     -1,    56,    -1,    58,    59,    -1,    -1,    -1,    63,    64,
-    65,    66,    67,    -1,    -1,    -1,    11,    12,    -1,    74,
-    -1,    76,    77,    78,    79,    -1,    -1,    22,    83,    24,
-    85,    26,    -1,    11,    12,    90,    91,    92,    93,    94,
-    -1,    36,    -1,    -1,    22,    40,    24,    -1,    26,    44,
-    -1,    -1,    47,    -1,    -1,    -1,    -1,    -1,    36,    -1,
-    -1,    -1,    40,    58,    -1,    -1,    44,    -1,    63,    47,
-    65,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    58,    76,    77,    -1,    -1,    63,    -1,    65,    -1,    67,
-    -1,    -1,    -1,    -1,    -1,    -1,    91,    -1,    76,    77,
+    65,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,
+    -1,    76,    77,    78,    79,    -1,    -1,    -1,    83,    -1,
+    85,    -1,    87,    11,    12,    90,    91,    92,    93,    94,
+    18,    -1,    -1,    -1,    22,    23,    24,    -1,    26,    27,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,    -1,
+    -1,    -1,    40,    -1,    -1,    -1,    44,    -1,    -1,    47,
+    48,    49,    50,    -1,    -1,    -1,    -1,    -1,    56,    -1,
+    58,    59,    -1,    -1,    -1,    63,    64,    65,    66,    67,
+    -1,    -1,    -1,    11,    12,    -1,    74,    -1,    76,    77,
+    78,    79,    -1,    -1,    22,    83,    24,    85,    26,    -1,
+    11,    12,    90,    91,    92,    93,    94,    -1,    36,    -1,
+    -1,    22,    40,    24,    -1,    26,    44,    -1,    -1,    47,
+    -1,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    40,
+    58,    -1,    -1,    44,    -1,    63,    47,    65,    -1,    67,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    58,    76,    77,
+    -1,    -1,    63,    -1,    65,    -1,    67,    -1,    -1,    -1,
+    -1,    -1,    -1,    91,    -1,    76,    77,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    91
+    91
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 #line 3 "/usr/share/bison.simple"
@@ -1311,13 +1309,13 @@
   switch (yyn) {
 
 case 1:
-#line 297 "asn1p_y.y"
+#line 299 "asn1p_y.y"
 {
 		*(void **)param = yyvsp[0].a_grammar;
 	;
     break;}
 case 2:
-#line 303 "asn1p_y.y"
+#line 305 "asn1p_y.y"
 {
 		yyval.a_grammar = asn1p_new();
 		checkmem(yyval.a_grammar);
@@ -1325,14 +1323,14 @@
 	;
     break;}
 case 3:
-#line 308 "asn1p_y.y"
+#line 310 "asn1p_y.y"
 {
 		yyval.a_grammar = yyvsp[-1].a_grammar;
 		TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
 	;
     break;}
 case 4:
-#line 329 "asn1p_y.y"
+#line 331 "asn1p_y.y"
 {
 
 		if(yyvsp[-1].a_module) {
@@ -1349,27 +1347,27 @@
 	;
     break;}
 case 5:
-#line 350 "asn1p_y.y"
+#line 352 "asn1p_y.y"
 { yyval.a_oid = 0; ;
     break;}
 case 6:
-#line 351 "asn1p_y.y"
+#line 353 "asn1p_y.y"
 { yyval.a_oid = yyvsp[0].a_oid; ;
     break;}
 case 7:
-#line 355 "asn1p_y.y"
+#line 357 "asn1p_y.y"
 {
 		yyval.a_oid = yyvsp[-1].a_oid;
 	;
     break;}
 case 8:
-#line 358 "asn1p_y.y"
+#line 360 "asn1p_y.y"
 {
 		yyval.a_oid = 0;
 	;
     break;}
 case 9:
-#line 364 "asn1p_y.y"
+#line 366 "asn1p_y.y"
 {
 		yyval.a_oid = asn1p_oid_new();
 		asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
@@ -1378,7 +1376,7 @@
 	;
     break;}
 case 10:
-#line 370 "asn1p_y.y"
+#line 372 "asn1p_y.y"
 {
 		yyval.a_oid = yyvsp[-1].a_oid;
 		asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
@@ -1387,74 +1385,74 @@
 	;
     break;}
 case 11:
-#line 379 "asn1p_y.y"
+#line 381 "asn1p_y.y"
 {					/* iso */
 		yyval.a_oid_arc.name = yyvsp[0].tv_str;
 		yyval.a_oid_arc.number = -1;
 	;
     break;}
 case 12:
-#line 383 "asn1p_y.y"
+#line 385 "asn1p_y.y"
 {		/* iso(1) */
 		yyval.a_oid_arc.name = yyvsp[-3].tv_str;
 		yyval.a_oid_arc.number = yyvsp[-1].a_int;
 	;
     break;}
 case 13:
-#line 387 "asn1p_y.y"
+#line 389 "asn1p_y.y"
 {					/* 1 */
 		yyval.a_oid_arc.name = 0;
 		yyval.a_oid_arc.number = yyvsp[0].a_int;
 	;
     break;}
 case 14:
-#line 397 "asn1p_y.y"
+#line 399 "asn1p_y.y"
 { yyval.a_module_flags = MSF_NOFLAGS; ;
     break;}
 case 15:
-#line 398 "asn1p_y.y"
+#line 400 "asn1p_y.y"
 {
 		yyval.a_module_flags = yyvsp[0].a_module_flags;
 	;
     break;}
 case 16:
-#line 407 "asn1p_y.y"
+#line 409 "asn1p_y.y"
 {
 		yyval.a_module_flags = yyvsp[0].a_module_flags;
 	;
     break;}
 case 17:
-#line 410 "asn1p_y.y"
+#line 412 "asn1p_y.y"
 {
 		yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
 	;
     break;}
 case 18:
-#line 419 "asn1p_y.y"
+#line 421 "asn1p_y.y"
 {
 		yyval.a_module_flags = MSF_EXPLICIT_TAGS;
 	;
     break;}
 case 19:
-#line 422 "asn1p_y.y"
+#line 424 "asn1p_y.y"
 {
 		yyval.a_module_flags = MSF_IMPLICIT_TAGS;
 	;
     break;}
 case 20:
-#line 425 "asn1p_y.y"
+#line 427 "asn1p_y.y"
 {
 		yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
 	;
     break;}
 case 21:
-#line 428 "asn1p_y.y"
+#line 430 "asn1p_y.y"
 {
 		yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
 	;
     break;}
 case 22:
-#line 432 "asn1p_y.y"
+#line 434 "asn1p_y.y"
 {
 		/* X.680Amd1 specifies TAG and XER */
 		if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
@@ -1472,23 +1470,23 @@
 	;
     break;}
 case 23:
-#line 453 "asn1p_y.y"
+#line 455 "asn1p_y.y"
 { yyval.a_module = 0; ;
     break;}
 case 24:
-#line 454 "asn1p_y.y"
+#line 456 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[0].a_module;
 	;
     break;}
 case 25:
-#line 463 "asn1p_y.y"
+#line 465 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[0].a_module;
 	;
     break;}
 case 26:
-#line 466 "asn1p_y.y"
+#line 468 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[-1].a_module;
 
@@ -1518,13 +1516,13 @@
 	;
     break;}
 case 27:
-#line 499 "asn1p_y.y"
+#line 501 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[0].a_module;
 	;
     break;}
 case 28:
-#line 502 "asn1p_y.y"
+#line 504 "asn1p_y.y"
 {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -1536,7 +1534,7 @@
 	;
     break;}
 case 29:
-#line 511 "asn1p_y.y"
+#line 513 "asn1p_y.y"
 {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -1546,7 +1544,7 @@
 	;
     break;}
 case 30:
-#line 518 "asn1p_y.y"
+#line 520 "asn1p_y.y"
 {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -1556,7 +1554,7 @@
 	;
     break;}
 case 31:
-#line 531 "asn1p_y.y"
+#line 533 "asn1p_y.y"
 {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -1566,11 +1564,11 @@
 	;
     break;}
 case 32:
-#line 539 "asn1p_y.y"
+#line 541 "asn1p_y.y"
 { asn1p_lexer_hack_push_encoding_control(); ;
     break;}
 case 33:
-#line 540 "asn1p_y.y"
+#line 542 "asn1p_y.y"
 {
 		fprintf(stderr,
 			"WARNING: ENCODING-CONTROL %s "
@@ -1581,7 +1579,7 @@
 	;
     break;}
 case 34:
-#line 552 "asn1p_y.y"
+#line 554 "asn1p_y.y"
 {
 		return yyerror(
 			"Attempt to redefine a standard basic type, "
@@ -1590,19 +1588,19 @@
 	;
     break;}
 case 35:
-#line 566 "asn1p_y.y"
+#line 568 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[-1].a_module;
 	;
     break;}
 case 36:
-#line 572 "asn1p_y.y"
+#line 574 "asn1p_y.y"
 {
 		return yyerror("Empty IMPORTS list");
 	;
     break;}
 case 37:
-#line 578 "asn1p_y.y"
+#line 580 "asn1p_y.y"
 {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -1610,14 +1608,14 @@
 	;
     break;}
 case 38:
-#line 583 "asn1p_y.y"
+#line 585 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[-1].a_module;
 		TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
 	;
     break;}
 case 39:
-#line 590 "asn1p_y.y"
+#line 592 "asn1p_y.y"
 {
 		yyval.a_xports = yyvsp[-3].a_xports;
 		yyval.a_xports->from = yyvsp[-1].tv_str;
@@ -1626,7 +1624,7 @@
 	;
     break;}
 case 40:
-#line 599 "asn1p_y.y"
+#line 601 "asn1p_y.y"
 {
 		yyval.a_xports = asn1p_xports_new();
 		checkmem(yyval.a_xports);
@@ -1634,14 +1632,14 @@
 	;
     break;}
 case 41:
-#line 604 "asn1p_y.y"
+#line 606 "asn1p_y.y"
 {
 		yyval.a_xports = yyvsp[-2].a_xports;
 		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
 	;
     break;}
 case 42:
-#line 611 "asn1p_y.y"
+#line 613 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1650,7 +1648,7 @@
 	;
     break;}
 case 43:
-#line 617 "asn1p_y.y"
+#line 619 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1659,19 +1657,19 @@
 	;
     break;}
 case 44:
-#line 626 "asn1p_y.y"
+#line 628 "asn1p_y.y"
 {
 		yyval.a_xports = yyvsp[-1].a_xports;
 	;
     break;}
 case 45:
-#line 629 "asn1p_y.y"
+#line 631 "asn1p_y.y"
 {
 		yyval.a_xports = 0;
 	;
     break;}
 case 46:
-#line 632 "asn1p_y.y"
+#line 634 "asn1p_y.y"
 {
 		/* Empty EXPORTS clause effectively prohibits export. */
 		yyval.a_xports = asn1p_xports_new();
@@ -1679,7 +1677,7 @@
 	;
     break;}
 case 47:
-#line 640 "asn1p_y.y"
+#line 642 "asn1p_y.y"
 {
 		yyval.a_xports = asn1p_xports_new();
 		assert(yyval.a_xports);
@@ -1687,14 +1685,14 @@
 	;
     break;}
 case 48:
-#line 645 "asn1p_y.y"
+#line 647 "asn1p_y.y"
 {
 		yyval.a_xports = yyvsp[-2].a_xports;
 		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
 	;
     break;}
 case 49:
-#line 652 "asn1p_y.y"
+#line 654 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1703,7 +1701,7 @@
 	;
     break;}
 case 50:
-#line 658 "asn1p_y.y"
+#line 660 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1712,7 +1710,7 @@
 	;
     break;}
 case 51:
-#line 668 "asn1p_y.y"
+#line 670 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-4].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -1722,7 +1720,7 @@
 	;
     break;}
 case 52:
-#line 678 "asn1p_y.y"
+#line 680 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1732,7 +1730,7 @@
 	;
     break;}
 case 53:
-#line 685 "asn1p_y.y"
+#line 687 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1741,16 +1739,16 @@
 	;
     break;}
 case 54:
-#line 694 "asn1p_y.y"
+#line 696 "asn1p_y.y"
 { ;
     break;}
 case 55:
-#line 695 "asn1p_y.y"
+#line 697 "asn1p_y.y"
 {
 	;
     break;}
 case 56:
-#line 711 "asn1p_y.y"
+#line 713 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1761,7 +1759,7 @@
 	;
     break;}
 case 57:
-#line 719 "asn1p_y.y"
+#line 721 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
@@ -1771,7 +1769,7 @@
 	;
     break;}
 case 58:
-#line 726 "asn1p_y.y"
+#line 728 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -1780,7 +1778,7 @@
 	;
     break;}
 case 59:
-#line 743 "asn1p_y.y"
+#line 745 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -1790,7 +1788,7 @@
 	;
     break;}
 case 60:
-#line 753 "asn1p_y.y"
+#line 755 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_plist = asn1p_paramlist_new(yylineno);
@@ -1802,7 +1800,7 @@
 	;
     break;}
 case 61:
-#line 762 "asn1p_y.y"
+#line 764 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_plist = yyvsp[-2].a_plist;
@@ -1813,14 +1811,14 @@
 	;
     break;}
 case 62:
-#line 773 "asn1p_y.y"
+#line 775 "asn1p_y.y"
 {
 		yyval.a_parg.governor = NULL;
 		yyval.a_parg.argument = yyvsp[0].tv_str;
 	;
     break;}
 case 63:
-#line 777 "asn1p_y.y"
+#line 779 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_parg.governor = asn1p_ref_new(yylineno);
@@ -1830,7 +1828,7 @@
 	;
     break;}
 case 64:
-#line 784 "asn1p_y.y"
+#line 786 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_parg.governor = asn1p_ref_new(yylineno);
@@ -1841,7 +1839,7 @@
 	;
     break;}
 case 65:
-#line 795 "asn1p_y.y"
+#line 797 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1849,20 +1847,20 @@
 	;
     break;}
 case 66:
-#line 800 "asn1p_y.y"
+#line 802 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
 case 67:
-#line 807 "asn1p_y.y"
+#line 809 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 	;
     break;}
 case 68:
-#line 810 "asn1p_y.y"
+#line 812 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1872,7 +1870,7 @@
 	;
     break;}
 case 69:
-#line 823 "asn1p_y.y"
+#line 825 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1880,14 +1878,14 @@
 	;
     break;}
 case 70:
-#line 828 "asn1p_y.y"
+#line 830 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
 case 71:
-#line 835 "asn1p_y.y"
+#line 837 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		checkmem(yyval.a_expr);
@@ -1897,15 +1895,15 @@
 	;
     break;}
 case 72:
-#line 845 "asn1p_y.y"
+#line 847 "asn1p_y.y"
 { yyval.a_int = 0; ;
     break;}
 case 73:
-#line 846 "asn1p_y.y"
+#line 848 "asn1p_y.y"
 { yyval.a_int = 1; ;
     break;}
 case 74:
-#line 850 "asn1p_y.y"
+#line 852 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1915,14 +1913,14 @@
 	;
     break;}
 case 75:
-#line 857 "asn1p_y.y"
+#line 859 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
 case 76:
-#line 864 "asn1p_y.y"
+#line 866 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1933,7 +1931,7 @@
 	;
     break;}
 case 77:
-#line 872 "asn1p_y.y"
+#line 874 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		yyval.a_expr->Identifier = yyvsp[-2].a_refcomp.name;
@@ -1941,7 +1939,7 @@
 	;
     break;}
 case 78:
-#line 877 "asn1p_y.y"
+#line 879 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_expr = asn1p_expr_new(yylineno);
@@ -1959,47 +1957,47 @@
 	;
     break;}
 case 79:
-#line 895 "asn1p_y.y"
+#line 897 "asn1p_y.y"
 { yyval.a_wsynt = 0; ;
     break;}
 case 80:
-#line 896 "asn1p_y.y"
+#line 898 "asn1p_y.y"
 {
 		yyval.a_wsynt = yyvsp[0].a_wsynt;
 	;
     break;}
 case 81:
-#line 903 "asn1p_y.y"
+#line 905 "asn1p_y.y"
 { asn1p_lexer_hack_enable_with_syntax(); ;
     break;}
 case 82:
-#line 905 "asn1p_y.y"
+#line 907 "asn1p_y.y"
 {
 		yyval.a_wsynt = yyvsp[-1].a_wsynt;
 	;
     break;}
 case 83:
-#line 911 "asn1p_y.y"
+#line 913 "asn1p_y.y"
 {
 		yyval.a_wsynt = asn1p_wsyntx_new();
 		TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
 	;
     break;}
 case 84:
-#line 915 "asn1p_y.y"
+#line 917 "asn1p_y.y"
 {
 		yyval.a_wsynt = yyvsp[-1].a_wsynt;
 		TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
 	;
     break;}
 case 85:
-#line 922 "asn1p_y.y"
+#line 924 "asn1p_y.y"
 {
 		yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 	;
     break;}
 case 86:
-#line 925 "asn1p_y.y"
+#line 927 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -2011,7 +2009,7 @@
 	;
     break;}
 case 87:
-#line 951 "asn1p_y.y"
+#line 953 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -2020,50 +2018,51 @@
 	;
     break;}
 case 88:
-#line 957 "asn1p_y.y"
+#line 959 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 	;
     break;}
 case 89:
-#line 963 "asn1p_y.y"
+#line 965 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
-		yyval.a_expr->constraints = yyvsp[-1].a_constr;
+		if(yyval.a_expr->constraints) {
+			assert(!yyvsp[-1].a_constr);
+		} else {
+			yyval.a_expr->constraints = yyvsp[-1].a_constr;
+		}
 		yyval.a_expr->marker = yyvsp[0].a_marker;
 	;
     break;}
 case 90:
-#line 971 "asn1p_y.y"
+#line 974 "asn1p_y.y"
 {
-		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
+		/* This type includes constraints on its own */
+		yyval.a_expr = yyvsp[0].a_expr;
 		checkmem(yyval.a_expr);
-		yyval.a_expr->Identifier = strdup("...");
-		checkmem(yyval.a_expr->Identifier);
-		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
-		yyval.a_expr->meta_type = AMT_TYPE;
+		assert(yyval.a_expr->meta_type);
 	;
     break;}
 case 91:
-#line 979 "asn1p_y.y"
+#line 983 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
 		yyval.a_expr->Identifier = strdup("...");
 		checkmem(yyval.a_expr->Identifier);
-		yyval.a_expr->value = yyvsp[0].a_value;
 		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
 case 92:
-#line 988 "asn1p_y.y"
+#line 991 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
 		yyval.a_expr->Identifier = strdup("...");
-		yyval.a_expr->value = yyvsp[0].a_value;
 		checkmem(yyval.a_expr->Identifier);
+		yyval.a_expr->value = yyvsp[0].a_value;
 		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
@@ -2071,11 +2070,23 @@
 case 93:
 #line 1000 "asn1p_y.y"
 {
-		yyval.a_expr = yyvsp[0].a_expr;
+		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
+		checkmem(yyval.a_expr);
+		yyval.a_expr->Identifier = strdup("...");
+		yyval.a_expr->value = yyvsp[0].a_value;
+		checkmem(yyval.a_expr->Identifier);
+		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
+		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
 case 94:
-#line 1003 "asn1p_y.y"
+#line 1012 "asn1p_y.y"
+{
+		yyval.a_expr = yyvsp[0].a_expr;
+	;
+    break;}
+case 95:
+#line 1015 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2083,16 +2094,16 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 95:
-#line 1009 "asn1p_y.y"
+case 96:
+#line 1021 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		checkmem(yyval.a_expr);
 		assert(yyval.a_expr->meta_type);
 	;
     break;}
-case 96:
-#line 1017 "asn1p_y.y"
+case 97:
+#line 1029 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_expr = yyvsp[-1].a_expr;
@@ -2108,8 +2119,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 97:
-#line 1041 "asn1p_y.y"
+case 98:
+#line 1053 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2118,8 +2129,8 @@
 		yyval.a_expr->meta_type = AMT_TYPEREF;
 	;
     break;}
-case 98:
-#line 1048 "asn1p_y.y"
+case 99:
+#line 1060 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2128,8 +2139,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 99:
-#line 1063 "asn1p_y.y"
+case 100:
+#line 1075 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2139,8 +2150,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 100:
-#line 1071 "asn1p_y.y"
+case 101:
+#line 1083 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2152,8 +2163,8 @@
 		free(yyvsp[-2].tv_str);
 	;
     break;}
-case 101:
-#line 1081 "asn1p_y.y"
+case 102:
+#line 1093 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2165,8 +2176,8 @@
 		free(yyvsp[-2].tv_str);
 	;
     break;}
-case 102:
-#line 1091 "asn1p_y.y"
+case 103:
+#line 1103 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2176,8 +2187,8 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 103:
-#line 1099 "asn1p_y.y"
+case 104:
+#line 1111 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = yyvsp[0].a_ref;
@@ -2198,8 +2209,8 @@
 		}
 	;
     break;}
-case 104:
-#line 1121 "asn1p_y.y"
+case 105:
+#line 1133 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2209,8 +2220,8 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 105:
-#line 1129 "asn1p_y.y"
+case 106:
+#line 1141 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = yyvsp[-2].a_ref;
@@ -2219,22 +2230,22 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 108:
-#line 1143 "asn1p_y.y"
+case 109:
+#line 1155 "asn1p_y.y"
 {
 		yyval.a_refcomp.lex_type = RLT_AmpUppercase;
 		yyval.a_refcomp.name = yyvsp[0].tv_str;
 	;
     break;}
-case 109:
-#line 1148 "asn1p_y.y"
+case 110:
+#line 1160 "asn1p_y.y"
 {
 		yyval.a_refcomp.lex_type = RLT_Amplowercase;
 		yyval.a_refcomp.name = yyvsp[0].tv_str;
 	;
     break;}
-case 110:
-#line 1161 "asn1p_y.y"
+case 111:
+#line 1173 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		assert(yyval.a_expr->Identifier == NULL);
@@ -2243,53 +2254,53 @@
 		yyval.a_expr->value = yyvsp[0].a_value;
 	;
     break;}
-case 111:
-#line 1171 "asn1p_y.y"
+case 112:
+#line 1183 "asn1p_y.y"
 { asn1p_lexer_hack_push_opaque_state(); ;
     break;}
-case 112:
-#line 1172 "asn1p_y.y"
+case 113:
+#line 1184 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_UNPARSED;
 	;
     break;}
-case 113:
-#line 1177 "asn1p_y.y"
+case 114:
+#line 1189 "asn1p_y.y"
 {
 		yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
 		checkmem(yyval.a_value);
 	;
     break;}
-case 114:
-#line 1181 "asn1p_y.y"
+case 115:
+#line 1193 "asn1p_y.y"
 {
 		yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
 		checkmem(yyval.a_value);
 	;
     break;}
-case 115:
-#line 1185 "asn1p_y.y"
+case 116:
+#line 1197 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 		checkmem(yyval.a_value);
 	;
     break;}
-case 116:
-#line 1189 "asn1p_y.y"
-{
-		yyval.a_value = yyvsp[0].a_value;
-	;
-    break;}
 case 117:
-#line 1192 "asn1p_y.y"
+#line 1201 "asn1p_y.y"
 {
 		yyval.a_value = yyvsp[0].a_value;
 	;
     break;}
 case 118:
-#line 1198 "asn1p_y.y"
+#line 1204 "asn1p_y.y"
+{
+		yyval.a_value = yyvsp[0].a_value;
+	;
+    break;}
+case 119:
+#line 1210 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -2302,8 +2313,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 119:
-#line 1209 "asn1p_y.y"
+case 120:
+#line 1221 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -2319,8 +2330,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 120:
-#line 1226 "asn1p_y.y"
+case 121:
+#line 1238 "asn1p_y.y"
 {
 		yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2;
 		yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
@@ -2332,8 +2343,8 @@
 		free(yyvsp[0].tv_opaque.buf);
 	;
     break;}
-case 121:
-#line 1236 "asn1p_y.y"
+case 122:
+#line 1248 "asn1p_y.y"
 {
 		int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
 		char *p = malloc(newsize + 1);
@@ -2347,68 +2358,68 @@
 		yyval.tv_opaque.len = newsize;
 	;
     break;}
-case 122:
-#line 1251 "asn1p_y.y"
+case 123:
+#line 1263 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_BOOLEAN; ;
     break;}
-case 123:
-#line 1252 "asn1p_y.y"
+case 124:
+#line 1264 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_NULL; ;
     break;}
-case 124:
-#line 1253 "asn1p_y.y"
+case 125:
+#line 1265 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_REAL; ;
     break;}
-case 125:
-#line 1254 "asn1p_y.y"
+case 126:
+#line 1266 "asn1p_y.y"
 { yyval.a_type = yyvsp[0].a_type; ;
     break;}
-case 126:
-#line 1255 "asn1p_y.y"
+case 127:
+#line 1267 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_OCTET_STRING; ;
     break;}
-case 127:
-#line 1256 "asn1p_y.y"
+case 128:
+#line 1268 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
     break;}
-case 128:
-#line 1257 "asn1p_y.y"
+case 129:
+#line 1269 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
     break;}
-case 129:
-#line 1258 "asn1p_y.y"
+case 130:
+#line 1270 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_EXTERNAL; ;
     break;}
-case 130:
-#line 1259 "asn1p_y.y"
+case 131:
+#line 1271 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
     break;}
-case 131:
-#line 1260 "asn1p_y.y"
+case 132:
+#line 1272 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
     break;}
-case 132:
-#line 1261 "asn1p_y.y"
+case 133:
+#line 1273 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_UTCTime; ;
     break;}
-case 133:
-#line 1262 "asn1p_y.y"
+case 134:
+#line 1274 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_GeneralizedTime; ;
     break;}
-case 134:
-#line 1269 "asn1p_y.y"
+case 135:
+#line 1281 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_INTEGER; ;
     break;}
-case 135:
-#line 1270 "asn1p_y.y"
+case 136:
+#line 1282 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_ENUMERATED; ;
     break;}
-case 136:
-#line 1271 "asn1p_y.y"
+case 137:
+#line 1283 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_BIT_STRING; ;
     break;}
-case 137:
-#line 1275 "asn1p_y.y"
+case 138:
+#line 1287 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -2416,8 +2427,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 138:
-#line 1281 "asn1p_y.y"
+case 139:
+#line 1293 "asn1p_y.y"
 {
 		if(yyvsp[0].a_expr) {
 			yyval.a_expr = yyvsp[0].a_expr;
@@ -2429,103 +2440,76 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 139:
-#line 1294 "asn1p_y.y"
+case 140:
+#line 1306 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_BMPString; ;
     break;}
-case 140:
-#line 1295 "asn1p_y.y"
+case 141:
+#line 1307 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_GeneralString;
 		return yyerror("GeneralString is not supported");
 	;
     break;}
-case 141:
-#line 1299 "asn1p_y.y"
+case 142:
+#line 1311 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_GraphicString;
 		return yyerror("GraphicString is not supported");
 	;
     break;}
-case 142:
-#line 1303 "asn1p_y.y"
+case 143:
+#line 1315 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_IA5String; ;
     break;}
-case 143:
-#line 1304 "asn1p_y.y"
+case 144:
+#line 1316 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_ISO646String; ;
     break;}
-case 144:
-#line 1305 "asn1p_y.y"
+case 145:
+#line 1317 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_NumericString; ;
     break;}
-case 145:
-#line 1306 "asn1p_y.y"
+case 146:
+#line 1318 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_PrintableString; ;
     break;}
-case 146:
-#line 1307 "asn1p_y.y"
+case 147:
+#line 1319 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_T61String;
 		return yyerror("T61String not implemented yet");
 	;
     break;}
-case 147:
-#line 1311 "asn1p_y.y"
+case 148:
+#line 1323 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_TeletexString; ;
     break;}
-case 148:
-#line 1312 "asn1p_y.y"
+case 149:
+#line 1324 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_UniversalString; ;
     break;}
-case 149:
-#line 1313 "asn1p_y.y"
+case 150:
+#line 1325 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_UTF8String; ;
     break;}
-case 150:
-#line 1314 "asn1p_y.y"
+case 151:
+#line 1326 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_VideotexString;
 		return yyerror("VideotexString is no longer supported");
 	;
     break;}
-case 151:
-#line 1318 "asn1p_y.y"
+case 152:
+#line 1330 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_VisibleString; ;
     break;}
-case 152:
-#line 1319 "asn1p_y.y"
+case 153:
+#line 1331 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_ObjectDescriptor; ;
     break;}
-case 153:
-#line 1323 "asn1p_y.y"
-{
-		yyval.a_expr = yyvsp[-1].a_expr;
-		assert(yyval.a_expr->expr_type == A1TC_INVALID);
-		yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
-		yyval.a_expr->meta_type = AMT_TYPE;
-	;
-    break;}
 case 154:
-#line 1329 "asn1p_y.y"
-{
-		yyval.a_expr = yyvsp[-1].a_expr;
-		assert(yyval.a_expr->expr_type == A1TC_INVALID);
-		yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
-		yyval.a_expr->meta_type = AMT_TYPE;
-	;
-    break;}
-case 155:
-#line 1335 "asn1p_y.y"
-{
-		yyval.a_expr = yyvsp[-1].a_expr;
-		assert(yyval.a_expr->expr_type == A1TC_INVALID);
-		yyval.a_expr->expr_type = ASN_CONSTR_SET;
-		yyval.a_expr->meta_type = AMT_TYPE;
-	;
-    break;}
-case 156:
-#line 1341 "asn1p_y.y"
+#line 1336 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -2535,8 +2519,8 @@
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 157:
-#line 1349 "asn1p_y.y"
+case 155:
+#line 1344 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -2546,8 +2530,35 @@
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
+case 156:
+#line 1355 "asn1p_y.y"
+{
+		yyval.a_expr = yyvsp[-1].a_expr;
+		assert(yyval.a_expr->expr_type == A1TC_INVALID);
+		yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
+		yyval.a_expr->meta_type = AMT_TYPE;
+	;
+    break;}
+case 157:
+#line 1361 "asn1p_y.y"
+{
+		yyval.a_expr = yyvsp[-1].a_expr;
+		assert(yyval.a_expr->expr_type == A1TC_INVALID);
+		yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
+		yyval.a_expr->meta_type = AMT_TYPE;
+	;
+    break;}
 case 158:
-#line 1357 "asn1p_y.y"
+#line 1367 "asn1p_y.y"
+{
+		yyval.a_expr = yyvsp[-1].a_expr;
+		assert(yyval.a_expr->expr_type == A1TC_INVALID);
+		yyval.a_expr->expr_type = ASN_CONSTR_SET;
+		yyval.a_expr->meta_type = AMT_TYPE;
+	;
+    break;}
+case 159:
+#line 1373 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -2555,8 +2566,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 159:
-#line 1363 "asn1p_y.y"
+case 160:
+#line 1379 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
@@ -2569,51 +2580,52 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 165:
-#line 1384 "asn1p_y.y"
+case 166:
+#line 1400 "asn1p_y.y"
 { yyval.a_constr = 0; ;
     break;}
-case 166:
-#line 1385 "asn1p_y.y"
+case 167:
+#line 1401 "asn1p_y.y"
+{
+		yyval.a_constr = yyvsp[0].a_constr;
+	;
+    break;}
+case 168:
+#line 1407 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
 	;
     break;}
-case 167:
-#line 1388 "asn1p_y.y"
+case 169:
+#line 1410 "asn1p_y.y"
 {
 		/*
 		 * This is a special case, for compatibility purposes.
 		 * It goes without parentheses.
 		 */
-		int ret;
-		yyval.a_constr = asn1p_constraint_new(yylineno);
-		checkmem(yyval.a_constr);
-		yyval.a_constr->type = ACT_CT_SIZE;
-		ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
-		checkmem(ret == 0);
+		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
 	;
     break;}
-case 168:
-#line 1403 "asn1p_y.y"
+case 170:
+#line 1420 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[-1].a_constr;
 	;
     break;}
-case 169:
-#line 1406 "asn1p_y.y"
+case 171:
+#line 1423 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
 	;
     break;}
-case 170:
-#line 1412 "asn1p_y.y"
+case 172:
+#line 1429 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
-case 171:
-#line 1415 "asn1p_y.y"
+case 173:
+#line 1432 "asn1p_y.y"
 {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -2621,8 +2633,8 @@
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
 	;
     break;}
-case 172:
-#line 1421 "asn1p_y.y"
+case 174:
+#line 1438 "asn1p_y.y"
 {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -2632,32 +2644,32 @@
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
 	;
     break;}
-case 173:
-#line 1432 "asn1p_y.y"
+case 175:
+#line 1449 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
-case 174:
-#line 1435 "asn1p_y.y"
+case 176:
+#line 1452 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
-case 175:
-#line 1438 "asn1p_y.y"
+case 177:
+#line 1455 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
-case 176:
-#line 1441 "asn1p_y.y"
+case 178:
+#line 1458 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
-case 177:
-#line 1447 "asn1p_y.y"
+case 179:
+#line 1464 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_constr = asn1p_constraint_new(yylineno);
@@ -2667,8 +2679,8 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 178:
-#line 1455 "asn1p_y.y"
+case 180:
+#line 1472 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_constr = asn1p_constraint_new(yylineno);
@@ -2678,8 +2690,8 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 179:
-#line 1463 "asn1p_y.y"
+case 181:
+#line 1480 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -2687,98 +2699,98 @@
 		yyval.a_constr->value = yyvsp[0].a_value;
 	;
     break;}
-case 180:
-#line 1469 "asn1p_y.y"
-{
-		yyval.a_constr = asn1p_constraint_new(yylineno);
-		checkmem(yyval.a_constr);
-		yyval.a_constr->type = yyvsp[-1].a_ctype;
-		yyval.a_constr->range_start = yyvsp[-2].a_value;
-		yyval.a_constr->range_stop = yyvsp[0].a_value;
-	;
-    break;}
-case 181:
-#line 1476 "asn1p_y.y"
-{
-		yyval.a_constr = asn1p_constraint_new(yylineno);
-		checkmem(yyval.a_constr);
-		yyval.a_constr->type = yyvsp[-1].a_ctype;
-		yyval.a_constr->range_start = asn1p_value_fromint(-123);
-		yyval.a_constr->range_stop = yyvsp[0].a_value;
-		yyval.a_constr->range_start->type = ATV_MIN;
-	;
-    break;}
 case 182:
-#line 1484 "asn1p_y.y"
+#line 1486 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
 		yyval.a_constr->type = yyvsp[-1].a_ctype;
 		yyval.a_constr->range_start = yyvsp[-2].a_value;
-		yyval.a_constr->range_stop = asn1p_value_fromint(321);
-		yyval.a_constr->range_stop->type = ATV_MAX;
+		yyval.a_constr->range_stop = yyvsp[0].a_value;
 	;
     break;}
 case 183:
-#line 1492 "asn1p_y.y"
+#line 1493 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
 		yyval.a_constr->type = yyvsp[-1].a_ctype;
 		yyval.a_constr->range_start = asn1p_value_fromint(-123);
-		yyval.a_constr->range_stop = asn1p_value_fromint(321);
+		yyval.a_constr->range_stop = yyvsp[0].a_value;
 		yyval.a_constr->range_start->type = ATV_MIN;
-		yyval.a_constr->range_stop->type = ATV_MAX;
 	;
     break;}
 case 184:
 #line 1501 "asn1p_y.y"
 {
-		yyval.a_constr = yyvsp[0].a_constr;
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = yyvsp[-1].a_ctype;
+		yyval.a_constr->range_start = yyvsp[-2].a_value;
+		yyval.a_constr->range_stop = asn1p_value_fromint(321);
+		yyval.a_constr->range_stop->type = ATV_MAX;
 	;
     break;}
 case 185:
-#line 1504 "asn1p_y.y"
+#line 1509 "asn1p_y.y"
+{
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = yyvsp[-1].a_ctype;
+		yyval.a_constr->range_start = asn1p_value_fromint(-123);
+		yyval.a_constr->range_stop = asn1p_value_fromint(321);
+		yyval.a_constr->range_start->type = ATV_MIN;
+		yyval.a_constr->range_stop->type = ATV_MAX;
+	;
+    break;}
+case 186:
+#line 1518 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
-case 186:
-#line 1510 "asn1p_y.y"
-{ yyval.a_ctype = ACT_EL_RANGE; ;
-    break;}
 case 187:
-#line 1511 "asn1p_y.y"
-{ yyval.a_ctype = ACT_EL_RLRANGE; ;
+#line 1521 "asn1p_y.y"
+{
+		yyval.a_constr = yyvsp[0].a_constr;
+	;
     break;}
 case 188:
-#line 1512 "asn1p_y.y"
-{ yyval.a_ctype = ACT_EL_LLRANGE; ;
+#line 1527 "asn1p_y.y"
+{ yyval.a_ctype = ACT_EL_RANGE; ;
     break;}
 case 189:
-#line 1513 "asn1p_y.y"
-{ yyval.a_ctype = ACT_EL_ULRANGE; ;
+#line 1528 "asn1p_y.y"
+{ yyval.a_ctype = ACT_EL_RLRANGE; ;
     break;}
 case 190:
-#line 1517 "asn1p_y.y"
+#line 1529 "asn1p_y.y"
+{ yyval.a_ctype = ACT_EL_LLRANGE; ;
+    break;}
+case 191:
+#line 1530 "asn1p_y.y"
+{ yyval.a_ctype = ACT_EL_ULRANGE; ;
+    break;}
+case 192:
+#line 1534 "asn1p_y.y"
 {
 		yyval.a_ctype = ACT_CT_SIZE;
 	;
     break;}
-case 191:
-#line 1520 "asn1p_y.y"
+case 193:
+#line 1537 "asn1p_y.y"
 {
 		yyval.a_ctype = ACT_CT_FROM;
 	;
     break;}
-case 192:
-#line 1526 "asn1p_y.y"
+case 194:
+#line 1543 "asn1p_y.y"
 {
 		yyval.a_value = yyvsp[0].a_value;
 	;
     break;}
-case 193:
-#line 1529 "asn1p_y.y"
+case 195:
+#line 1546 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -2791,57 +2803,57 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 194:
-#line 1540 "asn1p_y.y"
+case 196:
+#line 1557 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 		checkmem(yyval.a_value);
 	;
     break;}
-case 195:
-#line 1545 "asn1p_y.y"
+case 197:
+#line 1562 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_FALSE;
 	;
     break;}
-case 196:
-#line 1550 "asn1p_y.y"
+case 198:
+#line 1567 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(1);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_TRUE;
 	;
     break;}
-case 197:
-#line 1558 "asn1p_y.y"
+case 199:
+#line 1575 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
 	;
     break;}
-case 198:
-#line 1564 "asn1p_y.y"
+case 200:
+#line 1581 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
-case 199:
-#line 1567 "asn1p_y.y"
+case 201:
+#line 1584 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
-case 200:
-#line 1573 "asn1p_y.y"
+case 202:
+#line 1590 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
 		yyval.a_constr->type = ACT_EL_EXT;
 	;
     break;}
-case 201:
-#line 1578 "asn1p_y.y"
+case 203:
+#line 1595 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -2850,46 +2862,46 @@
 		yyval.a_constr->presence = yyvsp[0].a_pres;
 	;
     break;}
-case 202:
-#line 1591 "asn1p_y.y"
+case 204:
+#line 1608 "asn1p_y.y"
 { yyval.a_pres = ACPRES_DEFAULT; ;
     break;}
-case 203:
-#line 1592 "asn1p_y.y"
+case 205:
+#line 1609 "asn1p_y.y"
 { yyval.a_pres = yyvsp[0].a_pres; ;
     break;}
-case 204:
-#line 1596 "asn1p_y.y"
+case 206:
+#line 1613 "asn1p_y.y"
 {
 		yyval.a_pres = ACPRES_PRESENT;
 	;
     break;}
-case 205:
-#line 1599 "asn1p_y.y"
+case 207:
+#line 1616 "asn1p_y.y"
 {
 		yyval.a_pres = ACPRES_ABSENT;
 	;
     break;}
-case 206:
-#line 1602 "asn1p_y.y"
+case 208:
+#line 1619 "asn1p_y.y"
 {
 		yyval.a_pres = ACPRES_OPTIONAL;
 	;
     break;}
-case 207:
-#line 1608 "asn1p_y.y"
-{
-		yyval.a_constr = yyvsp[0].a_constr;
-	;
-    break;}
-case 208:
-#line 1611 "asn1p_y.y"
-{
-		yyval.a_constr = yyvsp[0].a_constr;
-	;
-    break;}
 case 209:
-#line 1620 "asn1p_y.y"
+#line 1625 "asn1p_y.y"
+{
+		yyval.a_constr = yyvsp[0].a_constr;
+	;
+    break;}
+case 210:
+#line 1628 "asn1p_y.y"
+{
+		yyval.a_constr = yyvsp[0].a_constr;
+	;
+    break;}
+case 211:
+#line 1637 "asn1p_y.y"
 {
 		asn1p_ref_t *ref = asn1p_ref_new(yylineno);
 		asn1p_constraint_t *ct;
@@ -2903,14 +2915,14 @@
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
 	;
     break;}
-case 210:
-#line 1635 "asn1p_y.y"
+case 212:
+#line 1652 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
 	;
     break;}
-case 211:
-#line 1641 "asn1p_y.y"
+case 213:
+#line 1658 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -2918,8 +2930,8 @@
 		yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
 	;
     break;}
-case 212:
-#line 1647 "asn1p_y.y"
+case 214:
+#line 1664 "asn1p_y.y"
 {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -2929,8 +2941,8 @@
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
 	;
     break;}
-case 213:
-#line 1661 "asn1p_y.y"
+case 215:
+#line 1678 "asn1p_y.y"
 {
 		char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
 		int ret;
@@ -2943,8 +2955,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 214:
-#line 1672 "asn1p_y.y"
+case 216:
+#line 1689 "asn1p_y.y"
 {
 		char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
 		int ret;
@@ -2958,14 +2970,14 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 215:
-#line 1688 "asn1p_y.y"
+case 217:
+#line 1705 "asn1p_y.y"
 {
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
-case 216:
-#line 1691 "asn1p_y.y"
+case 218:
+#line 1708 "asn1p_y.y"
 {
 		int l1 = strlen(yyvsp[-2].tv_str);
 		int l3 = strlen(yyvsp[0].tv_str);
@@ -2976,76 +2988,76 @@
 		yyval.tv_str[l1 + 1 + l3] = '\0';
 	;
     break;}
-case 217:
-#line 1709 "asn1p_y.y"
+case 219:
+#line 1726 "asn1p_y.y"
 { yyval.a_marker = EM_NOMARK; ;
     break;}
-case 218:
-#line 1710 "asn1p_y.y"
+case 220:
+#line 1727 "asn1p_y.y"
 { yyval.a_marker = yyvsp[0].a_marker; ;
     break;}
-case 219:
-#line 1714 "asn1p_y.y"
+case 221:
+#line 1731 "asn1p_y.y"
 {
 		yyval.a_marker = EM_OPTIONAL;
 	;
     break;}
-case 220:
-#line 1717 "asn1p_y.y"
+case 222:
+#line 1734 "asn1p_y.y"
 {
 		yyval.a_marker = EM_DEFAULT;
 		/* FIXME: store DefaultValue somewhere */
 	;
     break;}
-case 221:
-#line 1724 "asn1p_y.y"
-{
-	;
-    break;}
-case 222:
-#line 1726 "asn1p_y.y"
-{
-	;
-    break;}
 case 223:
-#line 1728 "asn1p_y.y"
-{ asn1p_lexer_hack_push_opaque_state(); ;
+#line 1741 "asn1p_y.y"
+{
+	;
     break;}
 case 224:
-#line 1728 "asn1p_y.y"
+#line 1743 "asn1p_y.y"
 {
 	;
     break;}
 case 225:
-#line 1749 "asn1p_y.y"
+#line 1745 "asn1p_y.y"
+{ asn1p_lexer_hack_push_opaque_state(); ;
+    break;}
+case 226:
+#line 1745 "asn1p_y.y"
+{
+	;
+    break;}
+case 227:
+#line 1766 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
 	;
     break;}
-case 226:
-#line 1753 "asn1p_y.y"
+case 228:
+#line 1770 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 	;
     break;}
-case 227:
-#line 1759 "asn1p_y.y"
+case 229:
+#line 1776 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 228:
-#line 1764 "asn1p_y.y"
+case 230:
+#line 1781 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 229:
-#line 1771 "asn1p_y.y"
+case 231:
+#line 1788 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -3054,30 +3066,30 @@
 		yyval.a_expr->Identifier = yyvsp[0].tv_str;
 	;
     break;}
-case 230:
-#line 1778 "asn1p_y.y"
-{
-		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
-		checkmem(yyval.a_expr);
-		yyval.a_expr->expr_type = A1TC_UNIVERVAL;
-		yyval.a_expr->meta_type = AMT_VALUE;
-		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
-		yyval.a_expr->value = yyvsp[-1].a_value;
-	;
-    break;}
-case 231:
-#line 1786 "asn1p_y.y"
-{
-		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
-		checkmem(yyval.a_expr);
-		yyval.a_expr->expr_type = A1TC_UNIVERVAL;
-		yyval.a_expr->meta_type = AMT_VALUE;
-		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
-		yyval.a_expr->value = yyvsp[-1].a_value;
-	;
-    break;}
 case 232:
-#line 1794 "asn1p_y.y"
+#line 1795 "asn1p_y.y"
+{
+		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
+		checkmem(yyval.a_expr);
+		yyval.a_expr->expr_type = A1TC_UNIVERVAL;
+		yyval.a_expr->meta_type = AMT_VALUE;
+		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
+		yyval.a_expr->value = yyvsp[-1].a_value;
+	;
+    break;}
+case 233:
+#line 1803 "asn1p_y.y"
+{
+		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
+		checkmem(yyval.a_expr);
+		yyval.a_expr->expr_type = A1TC_UNIVERVAL;
+		yyval.a_expr->meta_type = AMT_VALUE;
+		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
+		yyval.a_expr->value = yyvsp[-1].a_value;
+	;
+    break;}
+case 234:
+#line 1811 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -3086,8 +3098,8 @@
 		yyval.a_expr->value = yyvsp[0].a_value;
 	;
     break;}
-case 233:
-#line 1801 "asn1p_y.y"
+case 235:
+#line 1818 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -3097,86 +3109,86 @@
 		yyval.a_expr->meta_type = AMT_VALUE;
 	;
     break;}
-case 234:
-#line 1812 "asn1p_y.y"
-{
-		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
-		checkmem(yyval.a_value);
-	;
-    break;}
-case 235:
-#line 1816 "asn1p_y.y"
-{
-		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
-		checkmem(yyval.a_value);
-	;
-    break;}
 case 236:
-#line 1847 "asn1p_y.y"
-{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
+#line 1829 "asn1p_y.y"
+{
+		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
+		checkmem(yyval.a_value);
+	;
     break;}
 case 237:
-#line 1848 "asn1p_y.y"
-{ yyval.a_tag = yyvsp[0].a_tag; ;
+#line 1833 "asn1p_y.y"
+{
+		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
+		checkmem(yyval.a_value);
+	;
     break;}
 case 238:
-#line 1852 "asn1p_y.y"
+#line 1864 "asn1p_y.y"
+{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
+    break;}
+case 239:
+#line 1865 "asn1p_y.y"
+{ yyval.a_tag = yyvsp[0].a_tag; ;
+    break;}
+case 240:
+#line 1869 "asn1p_y.y"
 {
 		yyval.a_tag = yyvsp[0].a_tag;
 		yyval.a_tag.tag_mode = TM_DEFAULT;
 	;
     break;}
-case 239:
-#line 1856 "asn1p_y.y"
+case 241:
+#line 1873 "asn1p_y.y"
 {
 		yyval.a_tag = yyvsp[-1].a_tag;
 		yyval.a_tag.tag_mode = TM_IMPLICIT;
 	;
     break;}
-case 240:
-#line 1860 "asn1p_y.y"
+case 242:
+#line 1877 "asn1p_y.y"
 {
 		yyval.a_tag = yyvsp[-1].a_tag;
 		yyval.a_tag.tag_mode = TM_EXPLICIT;
 	;
     break;}
-case 241:
-#line 1867 "asn1p_y.y"
-{
-		checkmem(yyvsp[0].tv_str);
-		yyval.tv_str = yyvsp[0].tv_str;
-	;
-    break;}
-case 242:
-#line 1871 "asn1p_y.y"
-{
-		checkmem(yyvsp[0].tv_str);
-		yyval.tv_str = yyvsp[0].tv_str;
-	;
-    break;}
 case 243:
-#line 1879 "asn1p_y.y"
+#line 1884 "asn1p_y.y"
 {
 		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
 case 244:
-#line 1886 "asn1p_y.y"
+#line 1888 "asn1p_y.y"
 {
 		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
 case 245:
-#line 1893 "asn1p_y.y"
+#line 1896 "asn1p_y.y"
+{
+		checkmem(yyvsp[0].tv_str);
+		yyval.tv_str = yyvsp[0].tv_str;
+	;
+    break;}
+case 246:
+#line 1903 "asn1p_y.y"
+{
+		checkmem(yyvsp[0].tv_str);
+		yyval.tv_str = yyvsp[0].tv_str;
+	;
+    break;}
+case 247:
+#line 1910 "asn1p_y.y"
 {
 		memset(&yyval.tv_nametag, 0, sizeof(yyval.tv_nametag));
 		yyval.tv_nametag.name = yyvsp[0].tv_str;
 	;
     break;}
-case 246:
-#line 1897 "asn1p_y.y"
+case 248:
+#line 1914 "asn1p_y.y"
 {
 		yyval.tv_nametag.name = yyvsp[-1].tv_str;
 		yyval.tv_nametag.tag = yyvsp[0].a_tag;
@@ -3404,7 +3416,7 @@
     }
   return 1;
 }
-#line 1904 "asn1p_y.y"
+#line 1921 "asn1p_y.y"