parsing support for CONSTRAINED BY


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@826 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c
index 6aa1983..04e713f 100644
--- a/libasn1parser/asn1p_y.c
+++ b/libasn1parser/asn1p_y.c
@@ -204,11 +204,11 @@
 
 
 
-#define	YYFINAL		418
+#define	YYFINAL		423
 #define	YYFLAG		-32768
 #define	YYNTBASE	116
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 354 ? yytranslate[x] : 218)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 354 ? yytranslate[x] : 219)
 
 static const char yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -271,64 +271,65 @@
    490,   492,   494,   496,   498,   500,   502,   504,   506,   508,
    510,   512,   514,   515,   517,   519,   524,   528,   533,   535,
    539,   545,   547,   551,   555,   559,   564,   568,   570,   572,
-   576,   580,   584,   588,   590,   592,   594,   597,   600,   604,
-   606,   608,   610,   612,   614,   616,   618,   620,   626,   628,
-   632,   634,   638,   639,   641,   643,   645,   647,   649,   651,
-   655,   660,   662,   666,   669,   673,   675,   679,   680,   682,
-   684,   687,   690,   694,   696,   700,   702,   707,   712,   714,
-   716,   718,   720,   721,   723,   726,   731,   732,   734,   736,
-   738,   739,   741,   743,   745,   747,   749,   750,   752
+   576,   580,   584,   588,   590,   592,   593,   599,   601,   604,
+   607,   611,   613,   615,   617,   619,   621,   623,   625,   627,
+   633,   635,   639,   641,   645,   646,   648,   650,   652,   654,
+   656,   658,   662,   667,   669,   673,   676,   680,   682,   686,
+   687,   689,   691,   694,   697,   701,   703,   707,   709,   714,
+   719,   721,   723,   725,   727,   728,   730,   733,   738,   739,
+   741,   743,   745,   746,   748,   750,   752,   754,   756,   757,
+   759
 };
 
 static const short yyrhs[] = {   117,
-     0,   118,     0,   117,   118,     0,   214,   119,    34,   123,
+     0,   118,     0,   117,   118,     0,   215,   119,    34,   123,
      3,    21,   126,    39,     0,     0,   120,     0,   103,   121,
    104,     0,   103,   104,     0,   122,     0,   121,   122,     0,
-   217,     0,   217,   105,     9,   106,     0,     9,     0,     0,
+   218,     0,   218,   105,     9,   106,     0,     9,     0,     0,
    124,     0,   125,     0,   124,   125,     0,    41,    84,     0,
     52,    84,     0,    20,    84,     0,    43,    53,     0,    12,
     57,     0,     0,   127,     0,   128,     0,   127,   128,     0,
    130,     0,   135,     0,   143,     0,   170,     0,   138,     0,
      0,    38,    12,   129,     0,   178,     0,    54,   131,   107,
      0,    54,    46,     0,   132,     0,   131,   132,     0,   133,
-    46,   214,   119,     0,   134,     0,   133,   108,   134,     0,
-   214,     0,   214,   103,   104,     0,   217,     0,    42,   136,
+    46,   215,   119,     0,   134,     0,   133,   108,   134,     0,
+   215,     0,   215,   103,   104,     0,   218,     0,    42,   136,
    107,     0,    42,    17,   107,     0,    42,   107,     0,   137,
-     0,   136,   108,   137,     0,   214,     0,   214,   103,   104,
-     0,   217,     0,   214,   139,     3,   103,   140,   104,     0,
+     0,   136,   108,   137,     0,   215,     0,   215,   103,   104,
+     0,   218,     0,   215,   139,     3,   103,   140,   104,     0,
    165,     0,   175,     0,     0,   141,     0,   142,     0,   141,
-   108,   142,     0,   102,     0,   186,     0,   214,     3,   209,
-    87,     0,   214,     3,   163,     0,   214,     3,   153,     0,
-   214,   103,   144,   104,     3,   163,     0,   145,     0,   144,
-   108,   145,     0,   214,     0,   214,   109,   217,     0,   214,
-   109,   214,     0,   175,   109,   217,     0,   147,     0,   146,
-   108,   147,     0,   163,     0,   217,     0,     0,   149,     0,
-   150,     0,   149,   108,   150,     0,   217,   163,   203,     0,
+   108,   142,     0,   102,     0,   186,     0,   215,     3,   210,
+    87,     0,   215,     3,   163,     0,   215,     3,   153,     0,
+   215,   103,   144,   104,     3,   163,     0,   145,     0,   144,
+   108,   145,     0,   215,     0,   215,   109,   218,     0,   215,
+   109,   215,     0,   175,   109,   218,     0,   147,     0,   146,
+   108,   147,     0,   163,     0,   218,     0,     0,   149,     0,
+   150,     0,   149,   108,   150,     0,   218,   163,   204,     0,
     30,    68,   163,     0,   162,     0,   152,     0,   151,   108,
-   152,     0,   217,   163,     0,   162,     0,    28,   103,   155,
+   152,     0,   218,   163,     0,   162,     0,    28,   103,   155,
    104,   157,     0,     0,    88,     0,   156,     0,   155,   108,
-   156,     0,   168,   203,     0,   168,   163,   154,   203,     0,
-   168,   168,   154,   203,     0,     0,   158,     0,     0,    95,
+   156,     0,   168,   204,     0,   168,   163,   154,   204,     0,
+   168,   168,   154,   204,     0,     0,   158,     0,     0,    95,
     82,   103,   159,   160,   104,     0,   161,     0,   160,   161,
      0,     4,     0,   168,     0,   102,     0,   102,   110,   173,
-     0,   102,   110,   208,     0,   209,   164,   182,     0,   177,
+     0,   102,   110,   209,     0,   210,   164,   182,     0,   177,
      0,    27,   103,   151,   104,     0,    78,   103,   148,   104,
-     0,    79,   103,   148,   104,     0,    78,   182,    68,   216,
-   209,   164,     0,    79,   182,    68,   216,   209,   164,     0,
-    18,     0,    18,    35,    25,   217,     0,   214,   103,   146,
+     0,    79,   103,   148,   104,     0,    78,   182,    68,   217,
+   210,   164,     0,    79,   182,    68,   217,   210,   164,     0,
+    18,     0,    18,    35,    25,   218,     0,   215,   103,   146,
    104,     0,   165,     0,    56,    68,   165,     0,    11,     0,
-    11,   111,   214,     0,   215,   111,   214,     0,    11,   111,
-   217,     0,   215,     0,   215,   111,   166,     0,   167,     0,
+    11,   111,   215,     0,   216,   111,   215,     0,    11,   111,
+   218,     0,   216,     0,   216,   111,   166,     0,   167,     0,
    166,   111,   167,     0,   169,     0,   169,     0,    13,     0,
-    14,     0,   217,   139,     3,   171,     0,   217,   109,   171,
+    14,     0,   218,   139,     3,   171,     0,   218,   109,   171,
      0,     0,   103,   172,   174,     0,    63,     0,    45,     0,
-    86,     0,     5,     0,     7,     0,     6,     0,   208,     0,
-   173,     0,   217,     0,   214,   111,   217,     0,     4,     0,
+    86,     0,     5,     0,     7,     0,     6,     0,   209,     0,
+   173,     0,   218,     0,   215,   111,   218,     0,     4,     0,
    174,     4,     0,    24,     0,    63,     0,    76,     0,   176,
      0,    67,    81,     0,    65,    51,     0,    77,     0,    44,
      0,    36,    71,     0,    26,    81,     0,    91,     0,    47,
      0,   178,     0,    58,     0,    40,     0,    22,    81,     0,
-   175,     0,   176,   205,     0,    23,     0,    48,     0,    49,
+   175,     0,   176,   206,     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,    99,     0,   100,     0,    97,     0,    98,
@@ -336,27 +337,27 @@
    185,   106,     0,   105,   185,   106,     0,   184,   105,   185,
    106,     0,   186,     0,   186,   108,   102,     0,   186,   108,
    102,   108,   186,     0,   187,     0,   186,   179,   187,     0,
-   186,   180,   187,     0,   187,   181,   187,     0,   189,   105,
-   185,   106,     0,   105,   185,   106,     0,   190,     0,   191,
-     0,   190,   188,   190,     0,    61,   188,   190,     0,   190,
-   188,    60,     0,    61,   188,    60,     0,   197,     0,   192,
-     0,   101,     0,   101,   112,     0,   112,   101,     0,   112,
-   101,   112,     0,    80,     0,    46,     0,    45,     0,    86,
-     0,   208,     0,     6,     0,   217,     0,   214,     0,    95,
-    30,   103,   193,   104,     0,   194,     0,   193,   108,   194,
-     0,   102,     0,   217,   182,   195,     0,     0,   196,     0,
-    73,     0,    15,     0,    69,     0,   198,     0,   199,     0,
-   103,   214,   104,     0,   198,   103,   200,   104,     0,   201,
-     0,   200,   108,   201,     0,   113,   202,     0,   113,   111,
-   202,     0,   217,     0,   202,   111,   217,     0,     0,   204,
-     0,    69,     0,    33,   171,     0,   103,   104,     0,   103,
-   206,   104,     0,   207,     0,   206,   108,   207,     0,   217,
-     0,   217,   105,   208,   106,     0,   217,   105,   173,   106,
-     0,   208,     0,   102,     0,     9,     0,    10,     0,     0,
-   210,     0,   211,   213,     0,   114,   212,     9,   115,     0,
-     0,    89,     0,    19,     0,    75,     0,     0,    52,     0,
-    41,     0,    11,     0,    12,     0,    12,     0,     0,   217,
-     0,     8,     0
+   186,   180,   187,     0,   187,   181,   187,     0,   190,   105,
+   185,   106,     0,   105,   185,   106,     0,   191,     0,   192,
+     0,   191,   189,   191,     0,    61,   189,   191,     0,   191,
+   189,    60,     0,    61,   189,    60,     0,   198,     0,   193,
+     0,     0,    31,    25,   103,   188,   174,     0,   101,     0,
+   101,   112,     0,   112,   101,     0,   112,   101,   112,     0,
+    80,     0,    46,     0,    45,     0,    86,     0,   209,     0,
+     6,     0,   218,     0,   215,     0,    95,    30,   103,   194,
+   104,     0,   195,     0,   194,   108,   195,     0,   102,     0,
+   218,   182,   196,     0,     0,   197,     0,    73,     0,    15,
+     0,    69,     0,   199,     0,   200,     0,   103,   215,   104,
+     0,   199,   103,   201,   104,     0,   202,     0,   201,   108,
+   202,     0,   113,   203,     0,   113,   111,   203,     0,   218,
+     0,   203,   111,   218,     0,     0,   205,     0,    69,     0,
+    33,   171,     0,   103,   104,     0,   103,   207,   104,     0,
+   208,     0,   207,   108,   208,     0,   218,     0,   218,   105,
+   209,   106,     0,   218,   105,   173,   106,     0,   209,     0,
+   102,     0,     9,     0,    10,     0,     0,   211,     0,   212,
+   214,     0,   114,   213,     9,   115,     0,     0,    89,     0,
+    19,     0,    75,     0,     0,    52,     0,    41,     0,    11,
+     0,    12,     0,    12,     0,     0,   218,     0,     8,     0
 };
 
 #endif
@@ -377,19 +378,20 @@
   1110,  1120,  1130,  1136,  1150,  1174,  1181,  1195,  1204,  1214,
   1224,  1234,  1242,  1263,  1272,  1281,  1282,  1284,  1291,  1303,
   1313,  1321,  1321,  1326,  1331,  1336,  1341,  1345,  1349,  1353,
-  1356,  1361,  1373,  1389,  1400,  1414,  1416,  1417,  1418,  1419,
-  1420,  1421,  1422,  1423,  1424,  1425,  1426,  1427,  1433,  1435,
-  1436,  1439,  1446,  1458,  1460,  1464,  1468,  1469,  1470,  1471,
-  1472,  1476,  1477,  1478,  1479,  1483,  1484,  1491,  1491,  1492,
-  1492,  1493,  1495,  1497,  1502,  1506,  1515,  1519,  1524,  1528,
-  1534,  1544,  1548,  1551,  1554,  1559,  1568,  1576,  1582,  1588,
-  1595,  1603,  1611,  1620,  1623,  1628,  1630,  1631,  1632,  1635,
-  1639,  1644,  1650,  1655,  1658,  1662,  1675,  1689,  1695,  1699,
-  1704,  1710,  1722,  1724,  1727,  1731,  1734,  1739,  1743,  1751,
-  1766,  1772,  1779,  1792,  1804,  1819,  1823,  1840,  1845,  1848,
-  1853,  1875,  1880,  1885,  1891,  1897,  1905,  1913,  1921,  1928,
-  1938,  1943,  1973,  1975,  1978,  1985,  1991,  1993,  1994,  1995,
-  1998,  2000,  2001,  2004,  2009,  2016,  2023,  2025,  2029
+  1356,  1361,  1373,  1389,  1399,  1413,  1415,  1416,  1417,  1418,
+  1419,  1420,  1421,  1422,  1423,  1424,  1425,  1426,  1432,  1434,
+  1435,  1438,  1445,  1457,  1459,  1463,  1467,  1468,  1469,  1470,
+  1471,  1475,  1476,  1477,  1478,  1482,  1483,  1490,  1490,  1491,
+  1491,  1492,  1494,  1496,  1501,  1505,  1514,  1518,  1523,  1527,
+  1533,  1543,  1547,  1550,  1553,  1558,  1567,  1575,  1581,  1587,
+  1594,  1602,  1610,  1619,  1622,  1625,  1626,  1636,  1638,  1639,
+  1640,  1643,  1647,  1652,  1658,  1663,  1666,  1670,  1683,  1697,
+  1703,  1707,  1712,  1718,  1730,  1732,  1735,  1739,  1742,  1747,
+  1751,  1759,  1774,  1780,  1787,  1800,  1812,  1827,  1831,  1848,
+  1853,  1856,  1861,  1883,  1888,  1893,  1899,  1905,  1913,  1921,
+  1929,  1936,  1946,  1951,  1981,  1983,  1986,  1993,  1999,  2001,
+  2002,  2003,  2006,  2008,  2009,  2012,  2017,  2024,  2031,  2033,
+  2037
 };
 #endif
 
@@ -432,13 +434,13 @@
 "Value","@3","DefinedValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible",
 "BasicType","BasicString","Union","Intersection","Except","optConstraints","Constraints",
 "SetOfConstraints","ElementSetSpecs","ElementSetSpec","ConstraintSubtypeElement",
-"ConstraintRangeSpec","ConstraintSpec","SingleValue","ContainedSubtype","WithComponents",
-"WithComponentsList","WithComponentsElement","optPresenceConstraint","PresenceConstraint",
-"TableConstraint","SimpleTableConstraint","ComponentRelationConstraint","AtNotationList",
-"AtNotationElement","ComponentIdList","optMarker","Marker","UniverationDefinition",
-"UniverationList","UniverationElement","SignedNumber","optTag","Tag","TagTypeValue",
-"TagClass","TagPlicit","TypeRefName","ObjectClassReference","optIdentifier",
-"Identifier", NULL
+"@4","ConstraintRangeSpec","ConstraintSpec","SingleValue","ContainedSubtype",
+"WithComponents","WithComponentsList","WithComponentsElement","optPresenceConstraint",
+"PresenceConstraint","TableConstraint","SimpleTableConstraint","ComponentRelationConstraint",
+"AtNotationList","AtNotationElement","ComponentIdList","optMarker","Marker",
+"UniverationDefinition","UniverationList","UniverationElement","SignedNumber",
+"optTag","Tag","TagTypeValue","TagClass","TagPlicit","TypeRefName","ObjectClassReference",
+"optIdentifier","Identifier", NULL
 };
 #endif
 
@@ -463,13 +465,14 @@
    178,   178,   178,   178,   178,   178,   178,   179,   179,   180,
    180,   181,   182,   182,   183,   183,   184,   184,   185,   185,
    185,   186,   186,   186,   186,   187,   187,   187,   187,   187,
-   187,   187,   187,   187,   187,   188,   188,   188,   188,   189,
-   189,   190,   190,   190,   190,   190,   191,   192,   193,   193,
-   194,   194,   195,   195,   196,   196,   196,   197,   197,   198,
-   199,   200,   200,   201,   201,   202,   202,   203,   203,   204,
-   204,   205,   205,   206,   206,   207,   207,   207,   207,   207,
-   208,   208,   209,   209,   210,   211,   212,   212,   212,   212,
-   213,   213,   213,   214,   214,   215,   216,   216,   217
+   187,   187,   187,   187,   187,   188,   187,   189,   189,   189,
+   189,   190,   190,   191,   191,   191,   191,   191,   192,   193,
+   194,   194,   195,   195,   196,   196,   197,   197,   197,   198,
+   198,   199,   200,   201,   201,   202,   202,   203,   203,   204,
+   204,   205,   205,   206,   206,   207,   207,   208,   208,   208,
+   208,   208,   209,   209,   210,   210,   211,   212,   213,   213,
+   213,   213,   214,   214,   214,   215,   215,   216,   217,   217,
+   218
 };
 
 static const short yyr2[] = {     0,
@@ -493,17 +496,18 @@
      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
      1,     1,     0,     1,     1,     4,     3,     4,     1,     3,
      5,     1,     3,     3,     3,     4,     3,     1,     1,     3,
-     3,     3,     3,     1,     1,     1,     2,     2,     3,     1,
-     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,     2,     3,     1,     3,     1,     4,     4,     1,     1,
-     1,     1,     0,     1,     2,     4,     0,     1,     1,     1,
-     0,     1,     1,     1,     1,     1,     0,     1,     1
+     3,     3,     3,     1,     1,     0,     5,     1,     2,     2,
+     3,     1,     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,     2,     3,     1,     3,     1,     4,     4,
+     1,     1,     1,     1,     0,     1,     2,     4,     0,     1,
+     1,     1,     0,     1,     1,     1,     1,     1,     0,     1,
+     1
 };
 
 static const short yydefact[] = {     0,
-   264,   265,     1,     2,     5,     3,     0,     0,     6,   269,
+   266,   267,     1,     2,     5,     3,     0,     0,     6,   271,
     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,   164,     0,     0,
@@ -511,287 +515,291 @@
    173,   174,   175,   176,     0,    24,    25,    27,    28,    31,
     29,    30,    34,     0,     0,    32,     0,    47,     0,    48,
     50,    52,    36,     0,    37,     0,    40,    42,    44,     4,
-    26,   253,   118,   266,     0,   146,     0,     0,   160,   153,
+    26,   255,   118,   268,     0,   146,     0,     0,   160,   153,
    157,   159,   147,     0,     0,   148,   152,   156,     0,     0,
     54,    55,   149,   158,   122,     0,    33,    46,    45,     0,
-     0,    35,    38,     0,     0,     0,     0,   257,    64,    63,
-     0,   254,   261,     0,   161,   155,   154,   151,   150,     0,
+     0,    35,    38,     0,     0,     0,     0,   259,    64,    63,
+     0,   256,   263,     0,   161,   155,   154,   151,   150,     0,
     66,     0,    68,     0,     0,     0,    49,    51,     5,    41,
-    43,     0,   259,   260,   258,     0,   118,   266,   113,     0,
+    43,     0,   261,   262,   260,     0,   118,   268,   113,     0,
      0,   183,   183,    62,   183,   116,   162,   149,   107,     0,
-   263,   262,   255,   119,   121,     0,     0,     0,     0,    56,
-   128,   129,   123,   124,   126,   120,   137,   139,   138,   251,
-   252,   135,   134,   136,   132,   130,   141,   140,     0,   142,
-    39,     0,    90,   253,   127,     0,     0,     0,     0,     0,
+   265,   264,   257,   119,   121,     0,     0,     0,     0,    56,
+   128,   129,   123,   124,   126,   120,   137,   139,   138,   253,
+   254,   135,   134,   136,   132,   130,   141,   140,     0,   142,
+    39,     0,    90,   255,   127,     0,     0,     0,     0,     0,
     76,     0,     0,   184,   185,    76,     0,   106,     0,   163,
-   253,   253,    67,    71,    70,    69,   215,   212,   211,     0,
-   210,   213,     0,    60,     0,     0,     0,    57,    58,    61,
-   192,     0,   198,   199,   205,   204,   228,   229,   214,   217,
-   216,     0,     0,     0,     0,    95,     0,     0,   240,    88,
-    88,    92,   239,     0,   256,     0,   103,     0,    83,    86,
-   253,   117,     0,     0,     0,    77,    78,    82,   253,     0,
-   189,   267,     0,     0,   267,   250,   242,     0,   244,   249,
-   246,     0,    72,    74,    75,    65,   206,     0,     0,     0,
-     0,     0,    53,     0,   180,   181,   178,   179,     0,     0,
-   182,     0,     0,     0,     0,   125,   144,   133,   143,   131,
-     0,    87,    96,    91,   241,    89,   238,   238,   114,     0,
-   108,     0,    85,     0,   253,   109,     0,   238,   187,     0,
-   253,   268,     0,   110,   253,   243,     0,     0,   115,   253,
-   207,   208,   203,   201,     0,   230,   197,    59,   193,   194,
-   195,     0,   202,   200,     0,     0,   232,   145,     0,    93,
-    94,   104,   105,   142,    84,   186,    81,    79,    80,   190,
-     0,   188,     0,   245,     0,     0,    73,   209,   221,     0,
-   219,   183,   196,     0,   234,   236,   231,     0,    97,     0,
-   111,   112,   248,   247,   218,     0,   223,   235,     0,   233,
-     0,   191,   220,   226,   227,   225,   222,   224,   237,   101,
-     0,    99,   102,    98,   100,     0,     0,     0
+   255,   255,    67,    71,    70,    69,   217,     0,   214,   213,
+     0,   212,   215,     0,    60,     0,     0,     0,    57,    58,
+    61,   192,     0,   198,   199,   205,   204,   230,   231,   216,
+   219,   218,     0,     0,     0,     0,    95,     0,     0,   242,
+    88,    88,    92,   241,     0,   258,     0,   103,     0,    83,
+    86,   255,   117,     0,     0,     0,    77,    78,    82,   255,
+     0,   189,   269,     0,     0,   269,   252,   244,     0,   246,
+   251,   248,     0,    72,    74,    75,    65,     0,   208,     0,
+     0,     0,     0,     0,    53,     0,   180,   181,   178,   179,
+     0,     0,   182,     0,     0,     0,     0,   125,   144,   133,
+   143,   131,     0,    87,    96,    91,   243,    89,   240,   240,
+   114,     0,   108,     0,    85,     0,   255,   109,     0,   240,
+   187,     0,   255,   270,     0,   110,   255,   245,     0,     0,
+   115,   255,   206,   209,   210,   203,   201,     0,   232,   197,
+    59,   193,   194,   195,     0,   202,   200,     0,     0,   234,
+   145,     0,    93,    94,   104,   105,   142,    84,   186,    81,
+    79,    80,   190,     0,   188,     0,   247,     0,     0,    73,
+     0,   211,   223,     0,   221,   183,   196,     0,   236,   238,
+   233,     0,    97,     0,   111,   112,   250,   249,   207,   220,
+     0,   225,   237,     0,   235,     0,   191,   222,   228,   229,
+   227,   224,   226,   239,   101,     0,    99,   102,    98,   100,
+     0,     0,     0
 };
 
-static const short yydefgoto[] = {   416,
+static const short yydefgoto[] = {   421,
      3,     4,     8,     9,    13,    14,    25,    26,    27,    55,
     56,    57,   107,    58,    74,    75,    76,    77,    59,    69,
-    70,    60,   100,   227,   228,   229,    61,   130,   131,   282,
-   283,   265,   266,   267,   258,   259,   119,   317,   192,   193,
-   312,   313,   401,   411,   412,   268,   284,   155,   156,   173,
-   174,   194,   195,    62,   186,   243,   187,   308,   157,   103,
-   159,   104,   299,   300,   302,   203,   204,   205,   270,   271,
-   231,   289,   232,   233,   234,   235,   380,   381,   407,   408,
-   236,   237,   238,   356,   357,   385,   252,   253,   210,   278,
-   279,   239,   254,   122,   123,   146,   163,   240,   105,   331,
-   241
+    70,    60,   100,   228,   229,   230,    61,   130,   131,   283,
+   284,   266,   267,   268,   259,   260,   119,   319,   192,   193,
+   314,   315,   406,   416,   417,   269,   285,   155,   156,   173,
+   174,   194,   195,    62,   186,   244,   187,   310,   157,   103,
+   159,   104,   301,   302,   304,   203,   204,   205,   271,   272,
+   232,   381,   291,   233,   234,   235,   236,   384,   385,   412,
+   413,   237,   238,   239,   359,   360,   389,   253,   254,   210,
+   279,   280,   240,   255,   122,   123,   146,   163,   241,   105,
+   333,   242
 };
 
-static const short yypact[] = {   228,
--32768,-32768,   228,-32768,   -71,-32768,    38,    59,-32768,-32768,
--32768,-32768,    49,-32768,    -3,    58,-32768,-32768,    74,    54,
-    60,    67,   112,    84,   136,    58,-32768,    82,-32768,-32768,
--32768,-32768,-32768,   152,-32768,-32768,   419,-32768,   178,    33,
--32768,-32768,-32768,    61,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,   181,   419,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   332,   648,-32768,   121,-32768,   144,-32768,
-   132,-32768,-32768,    17,-32768,   -22,-32768,   143,-32768,-32768,
--32768,   -17,   137,-32768,   183,-32768,   194,   186,-32768,-32768,
--32768,-32768,-32768,   208,   203,-32768,-32768,-32768,   723,   275,
--32768,-32768,-32768,-32768,   179,   288,-32768,-32768,-32768,   184,
-   190,-32768,-32768,   228,   184,   191,   193,    20,-32768,-32768,
-   496,-32768,    86,   184,-32768,-32768,-32768,-32768,-32768,    79,
--32768,   188,   195,   200,   258,   355,-32768,-32768,   -71,-32768,
--32768,   260,-32768,-32768,-32768,   284,    53,   202,   263,   205,
-   238,   -15,   -14,-32768,    55,-32768,-32768,   206,-32768,   207,
--32768,-32768,-32768,-32768,-32768,   308,   723,   304,   184,   197,
--32768,-32768,   210,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   211,   209,
--32768,    93,-32768,    29,-32768,   199,   292,    11,   269,   214,
-    10,   221,   255,-32768,   220,    10,   259,-32768,    46,-32768,
-     6,   215,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    62,
--32768,-32768,   298,-32768,   228,   221,   230,   224,-32768,   189,
-   240,   232,    62,-32768,-32768,-32768,   236,-32768,-32768,-32768,
--32768,   260,   336,   304,   355,   246,   260,   355,-32768,   254,
-   254,-32768,-32768,   573,-32768,   304,   235,   108,-32768,-32768,
-   215,-32768,   221,   278,   243,   241,-32768,-32768,   215,   244,
-    72,   304,   221,   248,   304,-32768,-32768,   109,-32768,-32768,
-   252,   110,-32768,-32768,-32768,-32768,   247,   270,    71,   250,
-   266,   267,-32768,   197,-32768,-32768,-32768,-32768,   221,   221,
--32768,   221,   221,   176,   261,-32768,-32768,   371,-32768,-32768,
-   296,-32768,-32768,-32768,-32768,-32768,    15,    15,-32768,   167,
--32768,    11,-32768,   277,   215,-32768,    10,    15,-32768,   282,
-   215,-32768,   279,-32768,   215,-32768,    13,   167,-32768,     6,
--32768,   274,-32768,-32768,    52,-32768,-32768,-32768,-32768,-32768,
--32768,   281,-32768,-32768,    12,   115,-32768,-32768,   285,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   286,
-   573,-32768,   573,-32768,   287,   295,-32768,-32768,-32768,   118,
--32768,    55,-32768,   304,   294,-32768,-32768,   261,-32768,   221,
--32768,-32768,-32768,-32768,-32768,    52,    23,   294,   304,-32768,
-   145,   189,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-    22,-32768,-32768,-32768,-32768,   403,   407,-32768
+static const short yypact[] = {   247,
+-32768,-32768,   247,-32768,   -74,-32768,    46,    59,-32768,-32768,
+-32768,-32768,    49,-32768,   -66,   221,-32768,-32768,    57,    55,
+    75,    83,   119,   104,   195,   221,-32768,   116,-32768,-32768,
+-32768,-32768,-32768,   208,-32768,-32768,   427,-32768,   222,    24,
+-32768,-32768,-32768,    86,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   209,   427,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   351,   656,-32768,   146,-32768,   189,-32768,
+   162,-32768,-32768,    32,-32768,    -1,-32768,   167,-32768,-32768,
+-32768,    -8,   171,-32768,   194,-32768,   203,   223,-32768,-32768,
+-32768,-32768,-32768,   249,   225,-32768,-32768,-32768,   731,   299,
+-32768,-32768,-32768,-32768,   196,   305,-32768,-32768,-32768,   232,
+   205,-32768,-32768,   247,   232,   210,   213,     6,-32768,-32768,
+   504,-32768,    18,   232,-32768,-32768,-32768,-32768,-32768,    -3,
+-32768,   202,   204,   216,   267,   200,-32768,-32768,   -74,-32768,
+-32768,   285,-32768,-32768,-32768,   303,   -42,   218,   288,   224,
+   257,   -18,    68,-32768,    71,-32768,-32768,   226,-32768,   227,
+-32768,-32768,-32768,-32768,-32768,   323,   731,   320,   232,    80,
+-32768,-32768,   220,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   229,   228,
+-32768,    61,-32768,     5,-32768,   219,   311,    26,   293,   233,
+    52,   215,   274,-32768,   238,    52,   276,-32768,    43,-32768,
+     8,   231,-32768,-32768,-32768,-32768,-32768,   321,-32768,-32768,
+    -2,-32768,-32768,   317,-32768,   247,   215,   244,   241,-32768,
+   193,   256,   248,    -2,-32768,-32768,-32768,   252,-32768,-32768,
+-32768,-32768,   285,   352,   320,   200,   262,   285,   200,-32768,
+   270,   270,-32768,-32768,   581,-32768,   320,   250,    66,-32768,
+-32768,   231,-32768,   215,   291,   260,   253,-32768,-32768,   231,
+   261,    81,   320,   215,   265,   320,-32768,-32768,   124,-32768,
+-32768,   266,   143,-32768,-32768,-32768,-32768,   263,   258,   271,
+    70,   273,   275,   272,-32768,    80,-32768,-32768,-32768,-32768,
+   215,   215,-32768,   215,   215,   279,   269,-32768,-32768,   376,
+-32768,-32768,   301,-32768,-32768,-32768,-32768,-32768,    31,    31,
+-32768,   207,-32768,    26,-32768,   278,   231,-32768,    52,    31,
+-32768,   283,   231,-32768,   280,-32768,   231,-32768,    38,   207,
+-32768,     8,-32768,-32768,   277,-32768,-32768,    42,-32768,-32768,
+-32768,-32768,-32768,-32768,   282,-32768,-32768,     7,   163,-32768,
+-32768,   287,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,   284,   581,-32768,   581,-32768,   290,   297,-32768,
+   352,-32768,-32768,   164,-32768,    71,-32768,   320,   294,-32768,
+-32768,   269,-32768,   215,-32768,-32768,-32768,-32768,   376,-32768,
+    42,     2,   294,   320,-32768,   173,   193,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,    10,-32768,-32768,-32768,-32768,
+   393,   406,-32768
 };
 
 static const short yypgoto[] = {-32768,
--32768,   408,   271,-32768,-32768,   399,-32768,-32768,   387,-32768,
--32768,   358,-32768,-32768,-32768,   342,-32768,   305,-32768,-32768,
-   309,-32768,   356,-32768,-32768,   134,-32768,-32768,   262,-32768,
-    92,   227,-32768,   107,-32768,   114,-32768,   187,-32768,   192,
--32768,-32768,-32768,-32768,    26,  -188,   -80,  -312,   -52,-32768,
-   198,  -186,  -120,-32768,    -1,-32768,  -244,-32768,   -48,  -118,
--32768,    69,-32768,-32768,-32768,  -148,-32768,-32768,  -199,  -166,
-   -39,   212,-32768,  -204,-32768,-32768,-32768,    47,-32768,-32768,
--32768,-32768,-32768,-32768,    56,    63,  -265,-32768,-32768,-32768,
-   111,  -127,   -81,-32768,-32768,-32768,-32768,    31,-32768,   171,
-    -7
+-32768,   404,   281,-32768,-32768,   395,-32768,-32768,   385,-32768,
+-32768,   356,-32768,-32768,-32768,   339,-32768,   304,-32768,-32768,
+   312,-32768,   358,-32768,-32768,   125,-32768,-32768,   259,-32768,
+    82,   234,-32768,   100,-32768,   106,-32768,   179,-32768,   184,
+-32768,-32768,-32768,-32768,    17,  -189,   -78,  -139,   -53,-32768,
+   206,  -186,  -122,-32768,   -56,-32768,  -185,    56,   -43,  -119,
+-32768,    40,-32768,-32768,-32768,  -150,-32768,-32768,  -201,  -163,
+  -101,-32768,   212,-32768,  -264,-32768,-32768,-32768,    47,-32768,
+-32768,-32768,-32768,-32768,-32768,    60,    63,  -162,-32768,-32768,
+-32768,   108,  -126,   -81,-32768,-32768,-32768,-32768,    28,-32768,
+   177,    -7
 };
 
 
-#define	YYLAST		817
+#define	YYLAST		825
 
 
 static const short yytable[] = {    15,
-   121,   120,   158,   230,   207,    15,   208,   251,   188,   260,
-   117,   101,   101,    10,   175,   102,   102,    10,    10,    10,
-    10,   180,   181,   114,    10,   410,   292,     1,     2,    65,
-     5,     7,    72,     5,   171,   172,    79,   404,   143,   264,
-    10,   171,   172,     1,     2,    10,    11,   248,    65,    67,
-   132,   360,   361,    10,   180,   181,    10,    11,   391,    10,
-   392,   248,   369,   324,   200,   200,    79,    64,    10,    20,
-    71,     1,     2,   333,    78,   362,   217,    21,    10,   180,
-   181,   280,    28,   249,   344,   115,    64,   201,   206,   202,
-   202,   405,    16,   375,   144,   406,   118,   249,    22,   354,
-    23,    19,    72,   352,    78,    63,    73,    79,   145,    24,
-    29,   257,   257,   250,   276,   218,   165,   188,   132,   118,
-   188,   175,   384,   112,    63,   414,   161,   230,   190,   133,
-   343,   286,  -238,   260,   200,   158,  -238,   162,    34,    68,
-    71,    12,   118,    30,   139,    78,   262,   276,   410,   277,
-    31,   160,    17,   379,   164,  -264,   222,   171,   172,   202,
-   214,   216,   287,   124,    32,   176,   189,    33,   295,   296,
-   297,   298,    37,   288,    10,   180,   181,     1,     2,   330,
-   323,   217,   166,    10,   180,   181,   167,    36,   328,    66,
-   261,    10,   363,   269,     1,     2,   246,   133,   269,   215,
-   247,   281,   217,   285,    10,   180,   181,     1,     2,   280,
-   376,   321,   336,   339,   413,   322,   337,   340,   387,    80,
-   218,   395,   388,   402,   413,   396,   217,   108,    10,   180,
-   181,     1,     2,   397,   111,   353,   309,   190,     1,     2,
-   190,   218,   219,   310,   367,   116,   315,   124,   319,   371,
-   109,   110,   158,   373,   158,   291,   127,   220,   128,   349,
-   350,   222,   351,   125,   332,   218,   219,   332,     1,     2,
-   171,   172,   171,   172,   126,   189,   221,   134,   189,    83,
-    84,   220,   222,   129,   160,   295,   296,   297,   298,   135,
-   136,   223,   196,   138,   141,   142,   168,   197,   224,   225,
-   221,   226,   170,   169,  -265,   199,   222,   198,   209,   211,
-   212,    10,   364,   255,   261,   223,   256,   245,   263,   269,
-   242,   244,   272,   225,   273,   226,   275,   290,   118,   281,
-   364,   294,   285,   293,    82,   301,   303,   382,   305,   307,
-   311,   316,    83,    84,   320,   325,   326,   386,   327,   329,
-   189,   334,   345,    85,    38,    86,   338,    87,   341,   177,
-   178,   179,    10,   180,   181,     1,     2,    88,   189,   346,
-   342,    89,   347,   355,   358,    90,   386,   359,    91,    41,
-    42,    43,   366,   370,   372,   378,   383,   389,   382,    92,
-    45,   409,   393,   390,    93,    46,    94,    47,    95,   182,
-   394,   160,   417,   160,   399,    48,   418,    96,    97,   191,
-     6,    18,    35,    81,    49,   113,    50,   183,   137,   140,
-   106,    51,    98,    52,    53,    54,    10,   348,   213,     1,
-     2,   377,   274,   368,    99,   365,   415,   318,   314,   306,
-   184,    38,   403,   400,   304,   335,   398,   374,     0,     0,
-     0,     0,     0,     0,     0,     0,    39,   185,     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,   147,   148,    51,     0,
-    52,    53,    54,   149,     0,     0,     0,    85,    38,    86,
-     0,    87,   150,     0,     0,     0,     0,     0,     0,     0,
+   121,   158,   207,   120,   208,    15,   231,   252,   261,   188,
+   101,   101,   175,   415,    10,    10,   409,   171,   172,   117,
+   102,   102,   171,   172,   143,   294,   347,     5,     7,    65,
+     5,    10,    72,    10,     1,     2,    79,   249,    19,    10,
+    67,   357,     1,     2,   114,    10,   180,   181,    65,    10,
+    10,   180,   181,    10,    11,   132,    10,    11,   161,    10,
+  -266,   200,   326,   249,    64,    28,    79,    71,   124,   162,
+   410,    78,   335,   250,   411,   217,    63,    10,   180,   181,
+   144,   265,   281,    64,   201,   217,   202,    10,   180,   181,
+     1,     2,    16,    10,   145,    63,     1,     2,   289,   250,
+   166,    78,    72,   355,   167,   118,   115,    79,  -240,   290,
+   218,    29,  -240,   419,   219,   251,   165,   388,   118,   188,
+   175,   118,   188,   132,   219,   220,   133,   258,   190,   346,
+    68,    73,   231,   287,   261,   158,   365,    71,   112,   277,
+   221,   139,    78,   383,   277,   263,   278,   200,   160,    12,
+   200,   164,    17,   258,   378,   223,   363,   364,    30,   222,
+   214,   216,   176,   189,   247,   223,    31,   372,   248,   323,
+   206,    32,   202,   324,   224,   202,   415,   297,   298,   299,
+   300,   225,   226,   325,   227,   171,   172,    33,   332,   312,
+   262,   330,   317,   270,   133,   366,   215,    34,   270,   352,
+   353,   282,   354,   286,   177,   178,   179,    10,   180,   181,
+     1,     2,   281,   379,    10,   180,   181,     1,     2,   418,
+   217,    36,    10,   180,   181,     1,     2,   338,    37,   418,
+   407,   339,    20,    66,   395,   402,   396,   311,   190,    10,
+    21,   190,     1,     2,   182,   218,   341,    80,   370,   321,
+   342,   374,   108,   293,   158,   376,   158,     1,     2,   219,
+   220,    22,   183,    23,   111,   334,   391,   400,   334,   116,
+   392,   401,    24,   189,   125,   221,   189,     1,     2,   171,
+   172,   124,   160,   126,   217,   184,    10,   180,   181,   297,
+   298,   299,   300,   127,   222,   109,   110,   171,   172,   128,
+   223,   134,   185,    83,    84,   129,   135,   136,   138,   224,
+   168,   196,   169,   141,   367,   142,   262,   226,   170,   227,
+  -267,   270,   197,   219,   199,   212,   198,    10,   209,   211,
+   243,   282,   367,   256,   286,   257,   246,   264,   356,   245,
+   386,   273,   274,   276,   118,   288,   292,   295,   296,   189,
+   390,   303,   305,    82,   307,   309,   313,   318,   327,   322,
+   329,    83,    84,   328,   223,   343,   331,   189,   336,   344,
+   340,   345,    85,    38,    86,   348,    87,   350,   349,   361,
+   390,   358,   362,   369,   373,   375,    88,   387,   382,   393,
+    89,   394,   422,   386,    90,   397,   414,    91,    41,    42,
+    43,   160,   398,   160,   404,   423,     6,    18,    92,    45,
+    35,    81,   113,    93,    46,    94,    47,    95,   140,   191,
+   351,   137,   106,   380,    48,   213,    96,    97,   371,   368,
+   320,   316,   420,    49,    10,    50,   399,     1,     2,   275,
+    51,    98,    52,    53,    54,   306,   377,   408,   308,    38,
+   403,   405,   337,    99,     0,     0,     0,     0,     0,     0,
+     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,   147,   148,    51,     0,    52,    53,
+    54,   149,     0,     0,     0,    85,    38,    86,     0,    87,
+   150,     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,   151,
+     0,    92,    45,     0,     0,     0,    93,    46,    94,    47,
+    95,     0,     0,     0,     0,     0,     0,    48,     0,    96,
+    97,   152,   153,     0,     0,     0,    49,     0,    50,     0,
+   154,   147,   148,    51,    98,    52,    53,    54,   149,     0,
+     0,     0,    85,    38,    86,     0,    87,   150,     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,   151,     0,    92,    45,
+     0,     0,     0,    93,    46,    94,    47,    95,     0,     0,
+     0,     0,     0,     0,    48,     0,    96,    97,   152,   153,
+     0,     0,     0,    49,     0,    50,    83,    84,     0,     0,
+    51,    98,    52,    53,    54,     0,     0,    85,    38,    86,
+     0,    87,     0,     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,   151,     0,    92,    45,     0,     0,     0,    93,    46,
+     0,     0,     0,    92,    45,     0,     0,     0,    93,    46,
     94,    47,    95,     0,     0,     0,     0,     0,     0,    48,
-     0,    96,    97,   152,   153,     0,     0,     0,    49,     0,
-    50,     0,   154,   147,   148,    51,    98,    52,    53,    54,
-   149,     0,     0,     0,    85,    38,    86,     0,    87,   150,
-     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,   151,     0,
-    92,    45,     0,     0,     0,    93,    46,    94,    47,    95,
-     0,     0,     0,     0,     0,     0,    48,     0,    96,    97,
-   152,   153,     0,     0,     0,    49,     0,    50,    83,    84,
-     0,     0,    51,    98,    52,    53,    54,     0,     0,    85,
-    38,    86,     0,    87,     0,     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,     0,     0,    92,    45,     0,     0,     0,
-    93,    46,    94,    47,    95,     0,     0,     0,     0,     0,
-     0,    48,     0,    96,    97,     0,     0,     0,     0,     0,
-    49,     0,    50,     1,     2,     0,     0,    51,    98,    52,
-    53,    54,     0,     0,    85,    38,    86,     0,    87,     0,
-     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,     0,     0,
-    92,    45,     0,     0,     0,    93,    46,    94,    47,    95,
-     0,     0,     0,     0,     0,     0,    48,     0,    96,    97,
-     0,     0,     0,     0,     0,    49,     0,    50,     0,     0,
-     0,     0,    51,    98,    52,    53,    54
+     0,    96,    97,     0,     0,     0,     0,     0,    49,     0,
+    50,     1,     2,     0,     0,    51,    98,    52,    53,    54,
+     0,     0,    85,    38,    86,     0,    87,     0,     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,     0,     0,    92,    45,
+     0,     0,     0,    93,    46,    94,    47,    95,     0,     0,
+     0,     0,     0,     0,    48,     0,    96,    97,     0,     0,
+     0,     0,     0,    49,     0,    50,     0,     0,     0,     0,
+    51,    98,    52,    53,    54
 };
 
 static const short yycheck[] = {     7,
-    82,    82,   121,   170,   153,    13,   155,   194,   136,   198,
-    28,    64,    65,     8,   135,    64,    65,     8,     8,     8,
-     8,     9,    10,    46,     8,     4,   226,    11,    12,    37,
-     0,   103,    40,     3,    13,    14,    44,    15,    19,    30,
-     8,    13,    14,    11,    12,     8,     9,    33,    56,    17,
-    99,   317,   318,     8,     9,    10,     8,     9,   371,     8,
-   373,    33,   328,   263,    80,    80,    74,    37,     8,    12,
-    40,    11,    12,   273,    44,   320,     6,    20,     8,     9,
-    10,   209,     9,    69,   289,   108,    56,   103,   103,   105,
-   105,    69,    34,   338,    75,    73,   114,    69,    41,   304,
-    43,   105,   110,   303,    74,    37,    46,   115,    89,    52,
-    57,   102,   102,   194,   102,    45,   124,   245,   167,   114,
-   248,   242,   111,   107,    56,   104,    41,   294,   136,    99,
-    60,   212,   104,   322,    80,   254,   108,    52,     3,   107,
-   110,   104,   114,    84,   114,   115,   199,   102,     4,   104,
-    84,   121,   104,   102,   124,   103,    86,    13,    14,   105,
-   168,   169,   101,   111,    53,   135,   136,    84,    97,    98,
-    99,   100,    21,   112,     8,     9,    10,    11,    12,   108,
-   261,     6,   104,     8,     9,    10,   108,   106,   269,    12,
-   198,     8,   320,   201,    11,    12,   104,   167,   206,   169,
-   108,   209,     6,   211,     8,     9,    10,    11,    12,   337,
-   338,   104,   104,   104,   401,   108,   108,   108,   104,    39,
-    45,   104,   108,   390,   411,   108,     6,   107,     8,     9,
-    10,    11,    12,   382,   103,    60,   244,   245,    11,    12,
-   248,    45,    46,   245,   325,   103,   248,   111,   256,   331,
-   107,   108,   371,   335,   373,   225,    71,    61,    51,   299,
-   300,    86,   302,    81,   272,    45,    46,   275,    11,    12,
-    13,    14,    13,    14,    81,   245,    80,     3,   248,    11,
-    12,    61,    86,    81,   254,    97,    98,    99,   100,   111,
-     3,    95,     9,   104,   104,   103,   109,    35,   102,   103,
-    80,   105,   103,   109,   103,    68,    86,   103,   103,   103,
-     3,     8,   320,   115,   322,    95,    25,   109,   105,   327,
-   111,   111,    68,   103,   105,   105,    68,    30,   114,   337,
-   338,   108,   340,   104,     3,    96,   105,   345,   103,     4,
-    95,    88,    11,    12,   110,    68,   104,   355,   108,   106,
-   320,   104,   103,    22,    23,    24,   105,    26,   112,     5,
-     6,     7,     8,     9,    10,    11,    12,    36,   338,   104,
-   101,    40,   106,   113,     4,    44,   384,    82,    47,    48,
-    49,    50,   106,   102,   106,   112,   106,   103,   396,    58,
-    59,   399,   106,   108,    63,    64,    65,    66,    67,    45,
-   106,   371,     0,   373,   111,    74,     0,    76,    77,   139,
-     3,    13,    26,    56,    83,    74,    85,    63,   110,   115,
-    65,    90,    91,    92,    93,    94,     8,   294,   167,    11,
-    12,   340,   206,   327,   103,   322,   411,   251,   247,   242,
-    86,    23,   396,   388,   233,   275,   384,   337,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    38,   103,    -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,    11,    12,    90,    -1,
-    92,    93,    94,    18,    -1,    -1,    -1,    22,    23,    24,
-    -1,    26,    27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    82,   121,   153,    82,   155,    13,   170,   194,   198,   136,
+    64,    65,   135,     4,     8,     8,    15,    13,    14,    28,
+    64,    65,    13,    14,    19,   227,   291,     0,   103,    37,
+     3,     8,    40,     8,    11,    12,    44,    33,   105,     8,
+    17,   306,    11,    12,    46,     8,     9,    10,    56,     8,
+     8,     9,    10,     8,     9,    99,     8,     9,    41,     8,
+   103,    80,   264,    33,    37,     9,    74,    40,   111,    52,
+    69,    44,   274,    69,    73,     6,    37,     8,     9,    10,
+    75,    30,   209,    56,   103,     6,   105,     8,     9,    10,
+    11,    12,    34,     8,    89,    56,    11,    12,   101,    69,
+   104,    74,   110,   305,   108,   114,   108,   115,   104,   112,
+    31,    57,   108,   104,    45,   194,   124,   111,   114,   246,
+   243,   114,   249,   167,    45,    46,    99,   102,   136,    60,
+   107,    46,   296,   212,   324,   255,   322,   110,   107,   102,
+    61,   114,   115,   102,   102,   199,   104,    80,   121,   104,
+    80,   124,   104,   102,   340,    86,   319,   320,    84,    80,
+   168,   169,   135,   136,   104,    86,    84,   330,   108,   104,
+   103,    53,   105,   108,    95,   105,     4,    97,    98,    99,
+   100,   102,   103,   262,   105,    13,    14,    84,   108,   246,
+   198,   270,   249,   201,   167,   322,   169,     3,   206,   301,
+   302,   209,   304,   211,     5,     6,     7,     8,     9,    10,
+    11,    12,   339,   340,     8,     9,    10,    11,    12,   406,
+     6,   106,     8,     9,    10,    11,    12,   104,    21,   416,
+   394,   108,    12,    12,   374,   386,   376,   245,   246,     8,
+    20,   249,    11,    12,    45,    31,   104,    39,   327,   257,
+   108,   333,   107,   226,   374,   337,   376,    11,    12,    45,
+    46,    41,    63,    43,   103,   273,   104,   104,   276,   103,
+   108,   108,    52,   246,    81,    61,   249,    11,    12,    13,
+    14,   111,   255,    81,     6,    86,     8,     9,    10,    97,
+    98,    99,   100,    71,    80,   107,   108,    13,    14,    51,
+    86,     3,   103,    11,    12,    81,   111,     3,   104,    95,
+   109,     9,   109,   104,   322,   103,   324,   103,   103,   105,
+   103,   329,    35,    45,    68,     3,   103,     8,   103,   103,
+   111,   339,   340,   115,   342,    25,   109,   105,    60,   111,
+   348,    68,   105,    68,   114,    25,    30,   104,   108,   322,
+   358,    96,   105,     3,   103,     4,    95,    88,    68,   110,
+   108,    11,    12,   104,    86,   103,   106,   340,   104,   112,
+   105,   101,    22,    23,    24,   103,    26,   106,   104,     4,
+   388,   113,    82,   106,   102,   106,    36,   106,   112,   103,
+    40,   108,     0,   401,    44,   106,   404,    47,    48,    49,
+    50,   374,   106,   376,   111,     0,     3,    13,    58,    59,
+    26,    56,    74,    63,    64,    65,    66,    67,   115,   139,
+   296,   110,    65,   342,    74,   167,    76,    77,   329,   324,
+   252,   248,   416,    83,     8,    85,   381,    11,    12,   206,
+    90,    91,    92,    93,    94,   234,   339,   401,   243,    23,
+   388,   392,   276,   103,    -1,    -1,    -1,    -1,    -1,    -1,
+    -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,    11,    12,    90,    -1,    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,    -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,    -1,    -1,    -1,    74,    -1,    76,    77,    78,    79,
+    -1,    -1,    -1,    83,    -1,    85,    11,    12,    -1,    -1,
+    90,    91,    92,    93,    94,    -1,    -1,    22,    23,    24,
+    -1,    26,    -1,    -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,
+    -1,    -1,    -1,    58,    59,    -1,    -1,    -1,    63,    64,
     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,    -1,    -1,    -1,    74,    -1,    76,    77,
-    78,    79,    -1,    -1,    -1,    83,    -1,    85,    11,    12,
-    -1,    -1,    90,    91,    92,    93,    94,    -1,    -1,    22,
-    23,    24,    -1,    26,    -1,    -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,    -1,    -1,    58,    59,    -1,    -1,    -1,
-    63,    64,    65,    66,    67,    -1,    -1,    -1,    -1,    -1,
-    -1,    74,    -1,    76,    77,    -1,    -1,    -1,    -1,    -1,
-    83,    -1,    85,    11,    12,    -1,    -1,    90,    91,    92,
-    93,    94,    -1,    -1,    22,    23,    24,    -1,    26,    -1,
-    -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,    -1,    -1,
-    58,    59,    -1,    -1,    -1,    63,    64,    65,    66,    67,
-    -1,    -1,    -1,    -1,    -1,    -1,    74,    -1,    76,    77,
-    -1,    -1,    -1,    -1,    -1,    83,    -1,    85,    -1,    -1,
-    -1,    -1,    90,    91,    92,    93,    94
+    -1,    76,    77,    -1,    -1,    -1,    -1,    -1,    83,    -1,
+    85,    11,    12,    -1,    -1,    90,    91,    92,    93,    94,
+    -1,    -1,    22,    23,    24,    -1,    26,    -1,    -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,    -1,    -1,    58,    59,
+    -1,    -1,    -1,    63,    64,    65,    66,    67,    -1,    -1,
+    -1,    -1,    -1,    -1,    74,    -1,    76,    77,    -1,    -1,
+    -1,    -1,    -1,    83,    -1,    85,    -1,    -1,    -1,    -1,
+    90,    91,    92,    93,    94
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 #line 3 "/usr/share/bison.simple"
@@ -2563,18 +2571,17 @@
 case 144:
 #line 1390 "asn1p_y.y"
 {
-		yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2;
+		yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
 		yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
 		checkmem(yyval.tv_opaque.buf);
 		yyval.tv_opaque.buf[0] = '{';
-		yyval.tv_opaque.buf[1] = ' ';
-		memcpy(yyval.tv_opaque.buf + 2, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
+		memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
 		yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
 		free(yyvsp[0].tv_opaque.buf);
 	;
     break;}
 case 145:
-#line 1400 "asn1p_y.y"
+#line 1399 "asn1p_y.y"
 {
 		int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
 		char *p = malloc(newsize + 1);
@@ -2589,71 +2596,71 @@
 	;
     break;}
 case 146:
-#line 1415 "asn1p_y.y"
+#line 1414 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_BOOLEAN; ;
     break;}
 case 147:
-#line 1416 "asn1p_y.y"
+#line 1415 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_NULL; ;
     break;}
 case 148:
-#line 1417 "asn1p_y.y"
+#line 1416 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_REAL; ;
     break;}
 case 149:
-#line 1418 "asn1p_y.y"
+#line 1417 "asn1p_y.y"
 { yyval.a_type = yyvsp[0].a_type; ;
     break;}
 case 150:
-#line 1419 "asn1p_y.y"
+#line 1418 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_OCTET_STRING; ;
     break;}
 case 151:
-#line 1420 "asn1p_y.y"
+#line 1419 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
     break;}
 case 152:
-#line 1421 "asn1p_y.y"
+#line 1420 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
     break;}
 case 153:
-#line 1422 "asn1p_y.y"
+#line 1421 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_EXTERNAL; ;
     break;}
 case 154:
-#line 1423 "asn1p_y.y"
+#line 1422 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
     break;}
 case 155:
-#line 1424 "asn1p_y.y"
+#line 1423 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
     break;}
 case 156:
-#line 1425 "asn1p_y.y"
+#line 1424 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_UTCTime; ;
     break;}
 case 157:
-#line 1426 "asn1p_y.y"
+#line 1425 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_GeneralizedTime; ;
     break;}
 case 158:
-#line 1427 "asn1p_y.y"
+#line 1426 "asn1p_y.y"
 { yyval.a_type = yyvsp[0].a_type; ;
     break;}
 case 159:
-#line 1434 "asn1p_y.y"
+#line 1433 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_INTEGER; ;
     break;}
 case 160:
-#line 1435 "asn1p_y.y"
+#line 1434 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_ENUMERATED; ;
     break;}
 case 161:
-#line 1436 "asn1p_y.y"
+#line 1435 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_BIT_STRING; ;
     break;}
 case 162:
-#line 1440 "asn1p_y.y"
+#line 1439 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2662,7 +2669,7 @@
 	;
     break;}
 case 163:
-#line 1446 "asn1p_y.y"
+#line 1445 "asn1p_y.y"
 {
 		if(yyvsp[0].a_expr) {
 			yyval.a_expr = yyvsp[0].a_expr;
@@ -2675,91 +2682,91 @@
 	;
     break;}
 case 164:
-#line 1459 "asn1p_y.y"
+#line 1458 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_BMPString; ;
     break;}
 case 165:
-#line 1460 "asn1p_y.y"
+#line 1459 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_GeneralString;
 		fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
 	;
     break;}
 case 166:
-#line 1464 "asn1p_y.y"
+#line 1463 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_GraphicString;
 		fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
 	;
     break;}
 case 167:
-#line 1468 "asn1p_y.y"
+#line 1467 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_IA5String; ;
     break;}
 case 168:
-#line 1469 "asn1p_y.y"
+#line 1468 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_ISO646String; ;
     break;}
 case 169:
-#line 1470 "asn1p_y.y"
+#line 1469 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_NumericString; ;
     break;}
 case 170:
-#line 1471 "asn1p_y.y"
+#line 1470 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_PrintableString; ;
     break;}
 case 171:
-#line 1472 "asn1p_y.y"
+#line 1471 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_T61String;
 		fprintf(stderr, "WARNING: T61String is not fully supported\n");
 	;
     break;}
 case 172:
-#line 1476 "asn1p_y.y"
+#line 1475 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_TeletexString; ;
     break;}
 case 173:
-#line 1477 "asn1p_y.y"
+#line 1476 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_UniversalString; ;
     break;}
 case 174:
-#line 1478 "asn1p_y.y"
+#line 1477 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_UTF8String; ;
     break;}
 case 175:
-#line 1479 "asn1p_y.y"
+#line 1478 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_VideotexString;
 		fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
 	;
     break;}
 case 176:
-#line 1483 "asn1p_y.y"
+#line 1482 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_VisibleString; ;
     break;}
 case 177:
-#line 1484 "asn1p_y.y"
+#line 1483 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_ObjectDescriptor; ;
     break;}
 case 183:
-#line 1496 "asn1p_y.y"
+#line 1495 "asn1p_y.y"
 { yyval.a_constr = 0; ;
     break;}
 case 184:
-#line 1497 "asn1p_y.y"
+#line 1496 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
 case 185:
-#line 1503 "asn1p_y.y"
+#line 1502 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
 	;
     break;}
 case 186:
-#line 1506 "asn1p_y.y"
+#line 1505 "asn1p_y.y"
 {
 		/*
 		 * This is a special case, for compatibility purposes.
@@ -2769,25 +2776,25 @@
 	;
     break;}
 case 187:
-#line 1516 "asn1p_y.y"
+#line 1515 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[-1].a_constr;
 	;
     break;}
 case 188:
-#line 1519 "asn1p_y.y"
+#line 1518 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
 	;
     break;}
 case 189:
-#line 1525 "asn1p_y.y"
+#line 1524 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
 case 190:
-#line 1528 "asn1p_y.y"
+#line 1527 "asn1p_y.y"
 {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -2796,7 +2803,7 @@
 	;
     break;}
 case 191:
-#line 1534 "asn1p_y.y"
+#line 1533 "asn1p_y.y"
 {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -2807,31 +2814,31 @@
 	;
     break;}
 case 192:
-#line 1545 "asn1p_y.y"
+#line 1544 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
 case 193:
-#line 1548 "asn1p_y.y"
+#line 1547 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
 case 194:
-#line 1551 "asn1p_y.y"
+#line 1550 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
 case 195:
-#line 1554 "asn1p_y.y"
+#line 1553 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
 case 196:
-#line 1560 "asn1p_y.y"
+#line 1559 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_constr = asn1p_constraint_new(yylineno);
@@ -2842,7 +2849,7 @@
 	;
     break;}
 case 197:
-#line 1568 "asn1p_y.y"
+#line 1567 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_constr = asn1p_constraint_new(yylineno);
@@ -2853,7 +2860,7 @@
 	;
     break;}
 case 198:
-#line 1576 "asn1p_y.y"
+#line 1575 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -2862,7 +2869,7 @@
 	;
     break;}
 case 199:
-#line 1582 "asn1p_y.y"
+#line 1581 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -2871,7 +2878,7 @@
 	;
     break;}
 case 200:
-#line 1588 "asn1p_y.y"
+#line 1587 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -2881,7 +2888,7 @@
 	;
     break;}
 case 201:
-#line 1595 "asn1p_y.y"
+#line 1594 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -2892,7 +2899,7 @@
 	;
     break;}
 case 202:
-#line 1603 "asn1p_y.y"
+#line 1602 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -2903,7 +2910,7 @@
 	;
     break;}
 case 203:
-#line 1611 "asn1p_y.y"
+#line 1610 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -2915,76 +2922,91 @@
 	;
     break;}
 case 204:
-#line 1620 "asn1p_y.y"
+#line 1619 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
 case 205:
-#line 1623 "asn1p_y.y"
+#line 1622 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
 case 206:
-#line 1629 "asn1p_y.y"
-{ yyval.a_ctype = ACT_EL_RANGE; ;
+#line 1626 "asn1p_y.y"
+{ asn1p_lexer_hack_push_opaque_state(); ;
     break;}
 case 207:
-#line 1630 "asn1p_y.y"
-{ yyval.a_ctype = ACT_EL_RLRANGE; ;
+#line 1626 "asn1p_y.y"
+{
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = ACT_CT_CTDBY;
+		yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
+		checkmem(yyval.a_constr->value);
+		yyval.a_constr->value->type = ATV_UNPARSED;
+	;
     break;}
 case 208:
-#line 1631 "asn1p_y.y"
-{ yyval.a_ctype = ACT_EL_LLRANGE; ;
+#line 1637 "asn1p_y.y"
+{ yyval.a_ctype = ACT_EL_RANGE; ;
     break;}
 case 209:
-#line 1632 "asn1p_y.y"
-{ yyval.a_ctype = ACT_EL_ULRANGE; ;
+#line 1638 "asn1p_y.y"
+{ yyval.a_ctype = ACT_EL_RLRANGE; ;
     break;}
 case 210:
-#line 1636 "asn1p_y.y"
+#line 1639 "asn1p_y.y"
+{ yyval.a_ctype = ACT_EL_LLRANGE; ;
+    break;}
+case 211:
+#line 1640 "asn1p_y.y"
+{ yyval.a_ctype = ACT_EL_ULRANGE; ;
+    break;}
+case 212:
+#line 1644 "asn1p_y.y"
 {
 		yyval.a_ctype = ACT_CT_SIZE;
 	;
     break;}
-case 211:
-#line 1639 "asn1p_y.y"
+case 213:
+#line 1647 "asn1p_y.y"
 {
 		yyval.a_ctype = ACT_CT_FROM;
 	;
     break;}
-case 212:
-#line 1645 "asn1p_y.y"
+case 214:
+#line 1653 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_FALSE;
 	;
     break;}
-case 213:
-#line 1650 "asn1p_y.y"
+case 215:
+#line 1658 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(1);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_TRUE;
 	;
     break;}
-case 214:
-#line 1655 "asn1p_y.y"
+case 216:
+#line 1663 "asn1p_y.y"
 {
 		yyval.a_value = yyvsp[0].a_value;
 	;
     break;}
-case 215:
-#line 1658 "asn1p_y.y"
+case 217:
+#line 1666 "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 216:
-#line 1662 "asn1p_y.y"
+case 218:
+#line 1670 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -2997,8 +3019,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 217:
-#line 1676 "asn1p_y.y"
+case 219:
+#line 1684 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -3011,34 +3033,34 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 218:
-#line 1690 "asn1p_y.y"
+case 220:
+#line 1698 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
 	;
     break;}
-case 219:
-#line 1696 "asn1p_y.y"
+case 221:
+#line 1704 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
-case 220:
-#line 1699 "asn1p_y.y"
+case 222:
+#line 1707 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
-case 221:
-#line 1705 "asn1p_y.y"
+case 223:
+#line 1713 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
 		yyval.a_constr->type = ACT_EL_EXT;
 	;
     break;}
-case 222:
-#line 1710 "asn1p_y.y"
+case 224:
+#line 1718 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3047,46 +3069,46 @@
 		yyval.a_constr->presence = yyvsp[0].a_pres;
 	;
     break;}
-case 223:
-#line 1723 "asn1p_y.y"
+case 225:
+#line 1731 "asn1p_y.y"
 { yyval.a_pres = ACPRES_DEFAULT; ;
     break;}
-case 224:
-#line 1724 "asn1p_y.y"
+case 226:
+#line 1732 "asn1p_y.y"
 { yyval.a_pres = yyvsp[0].a_pres; ;
     break;}
-case 225:
-#line 1728 "asn1p_y.y"
+case 227:
+#line 1736 "asn1p_y.y"
 {
 		yyval.a_pres = ACPRES_PRESENT;
 	;
     break;}
-case 226:
-#line 1731 "asn1p_y.y"
+case 228:
+#line 1739 "asn1p_y.y"
 {
 		yyval.a_pres = ACPRES_ABSENT;
 	;
     break;}
-case 227:
-#line 1734 "asn1p_y.y"
+case 229:
+#line 1742 "asn1p_y.y"
 {
 		yyval.a_pres = ACPRES_OPTIONAL;
 	;
     break;}
-case 228:
-#line 1740 "asn1p_y.y"
-{
-		yyval.a_constr = yyvsp[0].a_constr;
-	;
-    break;}
-case 229:
-#line 1743 "asn1p_y.y"
-{
-		yyval.a_constr = yyvsp[0].a_constr;
-	;
-    break;}
 case 230:
-#line 1752 "asn1p_y.y"
+#line 1748 "asn1p_y.y"
+{
+		yyval.a_constr = yyvsp[0].a_constr;
+	;
+    break;}
+case 231:
+#line 1751 "asn1p_y.y"
+{
+		yyval.a_constr = yyvsp[0].a_constr;
+	;
+    break;}
+case 232:
+#line 1760 "asn1p_y.y"
 {
 		asn1p_ref_t *ref = asn1p_ref_new(yylineno);
 		asn1p_constraint_t *ct;
@@ -3100,14 +3122,14 @@
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
 	;
     break;}
-case 231:
-#line 1767 "asn1p_y.y"
+case 233:
+#line 1775 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
 	;
     break;}
-case 232:
-#line 1773 "asn1p_y.y"
+case 234:
+#line 1781 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3115,8 +3137,8 @@
 		yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
 	;
     break;}
-case 233:
-#line 1779 "asn1p_y.y"
+case 235:
+#line 1787 "asn1p_y.y"
 {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -3126,8 +3148,8 @@
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
 	;
     break;}
-case 234:
-#line 1793 "asn1p_y.y"
+case 236:
+#line 1801 "asn1p_y.y"
 {
 		char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
 		int ret;
@@ -3140,8 +3162,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 235:
-#line 1804 "asn1p_y.y"
+case 237:
+#line 1812 "asn1p_y.y"
 {
 		char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
 		int ret;
@@ -3155,14 +3177,14 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 236:
-#line 1820 "asn1p_y.y"
+case 238:
+#line 1828 "asn1p_y.y"
 {
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
-case 237:
-#line 1823 "asn1p_y.y"
+case 239:
+#line 1831 "asn1p_y.y"
 {
 		int l1 = strlen(yyvsp[-2].tv_str);
 		int l3 = strlen(yyvsp[0].tv_str);
@@ -3173,61 +3195,61 @@
 		yyval.tv_str[l1 + 1 + l3] = '\0';
 	;
     break;}
-case 238:
-#line 1841 "asn1p_y.y"
+case 240:
+#line 1849 "asn1p_y.y"
 {
 		yyval.a_marker.flags = EM_NOMARK;
 		yyval.a_marker.default_value = 0;
 	;
     break;}
-case 239:
-#line 1845 "asn1p_y.y"
+case 241:
+#line 1853 "asn1p_y.y"
 { yyval.a_marker = yyvsp[0].a_marker; ;
     break;}
-case 240:
-#line 1849 "asn1p_y.y"
+case 242:
+#line 1857 "asn1p_y.y"
 {
 		yyval.a_marker.flags = EM_OPTIONAL;
 		yyval.a_marker.default_value = 0;
 	;
     break;}
-case 241:
-#line 1853 "asn1p_y.y"
+case 243:
+#line 1861 "asn1p_y.y"
 {
 		yyval.a_marker.flags = EM_DEFAULT;
 		yyval.a_marker.default_value = yyvsp[0].a_value;
 	;
     break;}
-case 242:
-#line 1876 "asn1p_y.y"
+case 244:
+#line 1884 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
 	;
     break;}
-case 243:
-#line 1880 "asn1p_y.y"
+case 245:
+#line 1888 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 	;
     break;}
-case 244:
-#line 1886 "asn1p_y.y"
+case 246:
+#line 1894 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
 	;
     break;}
-case 245:
-#line 1891 "asn1p_y.y"
+case 247:
+#line 1899 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
 	;
     break;}
-case 246:
-#line 1898 "asn1p_y.y"
+case 248:
+#line 1906 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -3236,18 +3258,7 @@
 		yyval.a_expr->Identifier = yyvsp[0].tv_str;
 	;
     break;}
-case 247:
-#line 1905 "asn1p_y.y"
-{
-		yyval.a_expr = asn1p_expr_new(yylineno);
-		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 248:
+case 249:
 #line 1913 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
@@ -3258,18 +3269,29 @@
 		yyval.a_expr->value = yyvsp[-1].a_value;
 	;
     break;}
-case 249:
+case 250:
 #line 1921 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		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 251:
+#line 1929 "asn1p_y.y"
+{
+		yyval.a_expr = asn1p_expr_new(yylineno);
+		checkmem(yyval.a_expr);
+		yyval.a_expr->expr_type = A1TC_UNIVERVAL;
+		yyval.a_expr->meta_type = AMT_VALUE;
 		yyval.a_expr->value = yyvsp[0].a_value;
 	;
     break;}
-case 250:
-#line 1928 "asn1p_y.y"
+case 252:
+#line 1936 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -3279,103 +3301,103 @@
 		yyval.a_expr->meta_type = AMT_VALUE;
 	;
     break;}
-case 251:
-#line 1939 "asn1p_y.y"
-{
-		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
-		checkmem(yyval.a_value);
-	;
-    break;}
-case 252:
-#line 1943 "asn1p_y.y"
-{
-		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
-		checkmem(yyval.a_value);
-	;
-    break;}
 case 253:
-#line 1974 "asn1p_y.y"
-{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
+#line 1947 "asn1p_y.y"
+{
+		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
+		checkmem(yyval.a_value);
+	;
     break;}
 case 254:
-#line 1975 "asn1p_y.y"
-{ yyval.a_tag = yyvsp[0].a_tag; ;
+#line 1951 "asn1p_y.y"
+{
+		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
+		checkmem(yyval.a_value);
+	;
     break;}
 case 255:
-#line 1979 "asn1p_y.y"
+#line 1982 "asn1p_y.y"
+{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
+    break;}
+case 256:
+#line 1983 "asn1p_y.y"
+{ yyval.a_tag = yyvsp[0].a_tag; ;
+    break;}
+case 257:
+#line 1987 "asn1p_y.y"
 {
 		yyval.a_tag = yyvsp[-1].a_tag;
 		yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
 	;
     break;}
-case 256:
-#line 1986 "asn1p_y.y"
+case 258:
+#line 1994 "asn1p_y.y"
 {
 		yyval.a_tag = yyvsp[-2].a_tag;
 		yyval.a_tag.tag_value = yyvsp[-1].a_int;
 	;
     break;}
-case 257:
-#line 1992 "asn1p_y.y"
+case 259:
+#line 2000 "asn1p_y.y"
 { yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
     break;}
-case 258:
-#line 1993 "asn1p_y.y"
+case 260:
+#line 2001 "asn1p_y.y"
 { yyval.a_tag.tag_class = TC_UNIVERSAL; ;
     break;}
-case 259:
-#line 1994 "asn1p_y.y"
+case 261:
+#line 2002 "asn1p_y.y"
 { yyval.a_tag.tag_class = TC_APPLICATION; ;
     break;}
-case 260:
-#line 1995 "asn1p_y.y"
+case 262:
+#line 2003 "asn1p_y.y"
 { yyval.a_tag.tag_class = TC_PRIVATE; ;
     break;}
-case 261:
-#line 1999 "asn1p_y.y"
+case 263:
+#line 2007 "asn1p_y.y"
 { yyval.a_tag.tag_mode = TM_DEFAULT; ;
     break;}
-case 262:
-#line 2000 "asn1p_y.y"
-{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
-    break;}
-case 263:
-#line 2001 "asn1p_y.y"
-{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
-    break;}
 case 264:
-#line 2005 "asn1p_y.y"
-{
-		checkmem(yyvsp[0].tv_str);
-		yyval.tv_str = yyvsp[0].tv_str;
-	;
+#line 2008 "asn1p_y.y"
+{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
     break;}
 case 265:
 #line 2009 "asn1p_y.y"
-{
-		checkmem(yyvsp[0].tv_str);
-		yyval.tv_str = yyvsp[0].tv_str;
-	;
+{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
     break;}
 case 266:
-#line 2017 "asn1p_y.y"
+#line 2013 "asn1p_y.y"
 {
 		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
 case 267:
-#line 2024 "asn1p_y.y"
-{ yyval.tv_str = 0; ;
+#line 2017 "asn1p_y.y"
+{
+		checkmem(yyvsp[0].tv_str);
+		yyval.tv_str = yyvsp[0].tv_str;
+	;
     break;}
 case 268:
 #line 2025 "asn1p_y.y"
 {
+		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
 case 269:
-#line 2030 "asn1p_y.y"
+#line 2032 "asn1p_y.y"
+{ yyval.tv_str = 0; ;
+    break;}
+case 270:
+#line 2033 "asn1p_y.y"
+{
+		yyval.tv_str = yyvsp[0].tv_str;
+	;
+    break;}
+case 271:
+#line 2038 "asn1p_y.y"
 {
 		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
@@ -3603,7 +3625,7 @@
     }
   return 1;
 }
-#line 2036 "asn1p_y.y"
+#line 2044 "asn1p_y.y"