new WITH SYNTAX clause parsing


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@1072 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/libasn1fix/asn1fix_class.c b/libasn1fix/asn1fix_class.c
index bb24a16..5f124df 100644
--- a/libasn1fix/asn1fix_class.c
+++ b/libasn1fix/asn1fix_class.c
@@ -65,16 +65,3 @@
 	return NULL;
 }
 
-
-int
-asn1f_parse_class_with_syntax(arg_t *arg) {
-	asn1p_expr_t *expr = arg->expr;
-
-	if(expr->expr_type != A1TC_CLASSDEF
-	|| expr->with_syntax == NULL)
-		return 0;
-
-	DEBUG("Class %s: checking WITH SYNTAX", expr->Identifier);
-
-	return 0;
-}
diff --git a/libasn1fix/asn1fix_class.h b/libasn1fix/asn1fix_class.h
index b8a6e78..763e48c 100644
--- a/libasn1fix/asn1fix_class.h
+++ b/libasn1fix/asn1fix_class.h
@@ -12,10 +12,4 @@
 asn1p_expr_t *asn1f_class_access2(asn1p_t *asn, asn1p_module_t *mod,
 	asn1p_expr_t *expr, asn1p_ref_t *);
 
-/*
- * CLASS may contain the "WITH SYNTAX" clause, in which case we are
- * going to parse it.
- */
-int asn1f_parse_class_with_syntax(arg_t *arg);
-
 #endif	/* _ASN1FIX_CLASS_H_ */
diff --git a/libasn1fix/asn1fix_cws.c b/libasn1fix/asn1fix_cws.c
index 6a8abf9..a605c24 100644
--- a/libasn1fix/asn1fix_cws.c
+++ b/libasn1fix/asn1fix_cws.c
@@ -1,2 +1,15 @@
 #include "asn1fix_internal.h"
 #include "asn1fix_cws.h"
+
+int
+asn1f_parse_class_with_syntax(arg_t *arg) {
+	asn1p_expr_t *expr = arg->expr;
+
+	if(expr->expr_type != A1TC_CLASSDEF
+	|| expr->with_syntax == NULL)
+		return 0;
+
+	DEBUG("Class %s: checking WITH SYNTAX", expr->Identifier);
+
+	return 0;
+}
diff --git a/libasn1fix/asn1fix_cws.h b/libasn1fix/asn1fix_cws.h
index 75f7830..25fd208 100644
--- a/libasn1fix/asn1fix_cws.h
+++ b/libasn1fix/asn1fix_cws.h
@@ -1,4 +1,10 @@
 #ifndef	_ASN1FIX_CLASS_WITH_SYNTAX_H_
 #define	_ASN1FIX_CLASS_WITH_SYNTAX_H_
 
+/*
+ * CLASS may contain the "WITH SYNTAX" clause, in which case we are
+ * going to parse it.
+ */
+int asn1f_parse_class_with_syntax(arg_t *arg);
+
 #endif	/* _ASN1FIX_CLASS_WITH_SYNTAX_H_ */
diff --git a/libasn1fix/asn1fix_internal.h b/libasn1fix/asn1fix_internal.h
index 9ca2904..dabf856 100644
--- a/libasn1fix/asn1fix_internal.h
+++ b/libasn1fix/asn1fix_internal.h
@@ -61,6 +61,7 @@
 #include "asn1fix_compat.h"		/* Data compatibility */
 #include "asn1fix_constr.h"		/* Constructed types */
 #include "asn1fix_class.h"		/* CLASS support */
+#include "asn1fix_cws.h"		/* CLASS WITH SYNTAX support */
 #include "asn1fix_param.h"		/* Parametrization */
 #include "asn1fix_retrieve.h"		/* Data retrieval */
 #include "asn1fix_enum.h"		/* Process ENUMERATED */
diff --git a/libasn1parser/asn1p_class.c b/libasn1parser/asn1p_class.c
index cd0e385..741d98e 100644
--- a/libasn1parser/asn1p_class.c
+++ b/libasn1parser/asn1p_class.c
@@ -18,10 +18,13 @@
 void
 asn1p_wsyntx_chunk_free(asn1p_wsyntx_chunk_t *wc) {
 	if(wc) {
-		if(wc->ref)
-			asn1p_ref_free(wc->ref);
-		if(wc->buf)
-			free(wc->buf);
+		switch(wc->type) {
+		case WC_LITERAL: free(wc->content.token); break;
+		case WC_REFERENCE: asn1p_ref_free(wc->content.ref); break;
+		case WC_OPTIONALGROUP:
+			asn1p_wsyntx_free(wc->content.syntax);
+			break;
+		}
 		free(wc);
 	}
 }
@@ -32,21 +35,17 @@
 
 	nc = asn1p_wsyntx_chunk_new();
 	if(nc) {
-		if(wc->buf) {
-			nc->buf = malloc(wc->len + 1);
-			if(nc->buf) {
-				nc->len = wc->len;
-				memcpy(nc->buf, wc->buf, wc->len);
-				nc->buf[nc->len] = '\0';
-			}
-		}
-		if(wc->ref) {
-			nc->ref = asn1p_ref_clone(wc->ref);
-		}
-
-		if(!nc->ref && !nc->buf) {
-			asn1p_wsyntx_chunk_free(nc);
-			return NULL;
+		switch(wc->type) {
+		case WC_LITERAL:
+			nc->content.token = malloc(strlen(wc->content.token)+1);
+			strcpy(nc->content.token, wc->content.token);
+			break;
+		case WC_REFERENCE:
+			nc->content.ref = asn1p_ref_clone(wc->content.ref);
+			break;
+		case WC_OPTIONALGROUP:
+			nc->content.syntax = asn1p_wsyntx_clone(wc->content.syntax);
+			break;
 		}
 	}
 
@@ -103,11 +102,15 @@
 
 	if(do_copy) {
 		static asn1p_wsyntx_chunk_t tmp;
-		tmp.ref = ref;
+		tmp.type = WC_REFERENCE;
+		tmp.content.ref = ref;
 		wc = asn1p_wsyntx_chunk_clone(&tmp);
 	} else {
 		wc = asn1p_wsyntx_chunk_new();
-		if(wc) wc->ref = ref;
+		if(wc) {
+			wc->type = WC_REFERENCE;
+			wc->content.ref = ref;
+		}
 	}
 
 	return wc;
@@ -119,17 +122,31 @@
 
 	if(do_copy) {
 		static asn1p_wsyntx_chunk_t tmp;
-		tmp.buf = buf;
-		tmp.len = len;
+		tmp.type = WC_LITERAL;
+		tmp.content.token = buf;
 		wc = asn1p_wsyntx_chunk_clone(&tmp);
 	} else {
 		wc = asn1p_wsyntx_chunk_new();
 		if(wc) {
-			wc->buf = buf;
-			wc->len = len;
+			wc->type = WC_LITERAL;
+			wc->content.token = buf;
 		}
 	}
 
 	return wc;
 }
 
+
+asn1p_wsyntx_chunk_t *
+asn1p_wsyntx_chunk_fromsyntax(asn1p_wsyntx_t *syntax) {
+	asn1p_wsyntx_chunk_t *wc;
+
+	wc = asn1p_wsyntx_chunk_new();
+	if(wc) {
+		wc->type = WC_OPTIONALGROUP;
+		wc->content.syntax = syntax;
+	}
+
+	return wc;
+}
+
diff --git a/libasn1parser/asn1p_class.h b/libasn1parser/asn1p_class.h
index 9448d9a..ca311fe 100644
--- a/libasn1parser/asn1p_class.h
+++ b/libasn1parser/asn1p_class.h
@@ -10,15 +10,21 @@
  * WITH SYNTAX free-form chunks.
  */
 typedef struct asn1p_wsyntx_chunk_s {
+	enum {
+		WC_LITERAL,
+		WC_REFERENCE,
+		WC_OPTIONALGROUP
+	} type;
 	/*
-	 * It could be the union, but the story is:
-	 * if ref is here, the ref is used.
-	 * Otherwise, buf/len is used.
+	 * WC_LITERAL -> {buf, len}
+	 * WC_REFERENCE -> {ref}
+	 * WC_OPTIONALGROUP -> {syntax}
 	 */
-	asn1p_ref_t *ref;
-
-	char	*buf;
-	int	 len;
+	union {
+		char	*token;
+		asn1p_ref_t *ref;
+		struct asn1p_wsyntx_s *syntax;
+	} content;
 
 	TQ_ENTRY(struct asn1p_wsyntx_chunk_s) next;
 } asn1p_wsyntx_chunk_t;
@@ -47,7 +53,8 @@
  * 	-1:	Failure to add component (refer to errno)
  */
 asn1p_wsyntx_chunk_t *asn1p_wsyntx_chunk_fromref(asn1p_ref_t *ref, int do_copy);
-asn1p_wsyntx_chunk_t *asn1p_wsyntx_chunk_frombuf(char *buf, int len, int do_copy);
+asn1p_wsyntx_chunk_t *asn1p_wsyntx_chunk_frombuf(char *buf, int len, int _copy);
+asn1p_wsyntx_chunk_t *asn1p_wsyntx_chunk_fromsyntax(asn1p_wsyntx_t *syntax);
 
 
 #endif	/* ASN1_PARSER_CLASS_H */
diff --git a/libasn1parser/asn1p_l.c b/libasn1parser/asn1p_l.c
index 4ba1ec1..9eea6ca 100644
--- a/libasn1parser/asn1p_l.c
+++ b/libasn1parser/asn1p_l.c
@@ -312,149 +312,151 @@
 	*yy_cp = '\0'; \
 	yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 133
-#define YY_END_OF_BUFFER 134
-static yyconst short int yy_acclist[1240] =
+#define YY_NUM_RULES 137
+#define YY_END_OF_BUFFER 138
+static yyconst short int yy_acclist[1258] =
     {   0,
-      134,  132,  133,  127,  132,  133,  127,  133,  130,  132,
-      133,   19,  132,  133,  130,  132,  133,  132,  133,  130,
-      132,  133,  132,  133,  130,  132,  133,  132,  133,   33,
-      132,  133,   32,  132,  133,  130,  132,  133,  132,  133,
-      119,  120,  132,  133,  119,  120,  132,  133,  119,  120,
-      132,  133,  119,  120,  132,  133,  119,  120,  132,  133,
-      119,  120,  132,  133,  119,  120,  132,  133,  119,  120,
-      132,  133,  119,  120,  132,  133,  119,  120,  132,  133,
-      119,  120,  132,  133,  119,  120,  132,  133,  119,  120,
-      132,  133,  119,  120,  132,  133,  119,  120,  132,  133,
+      138,  136,  137,  131,  136,  137,  131,  137,  134,  136,
+      137,   19,  136,  137,  134,  136,  137,  136,  137,  134,
+      136,  137,  136,  137,  134,  136,  137,  136,  137,   33,
+      136,  137,   32,  136,  137,  134,  136,  137,  136,  137,
+      119,  120,  136,  137,  119,  120,  136,  137,  119,  120,
+      136,  137,  119,  120,  136,  137,  119,  120,  136,  137,
+      119,  120,  136,  137,  119,  120,  136,  137,  119,  120,
+      136,  137,  119,  120,  136,  137,  119,  120,  136,  137,
+      119,  120,  136,  137,  119,  120,  136,  137,  119,  120,
+      136,  137,  119,  120,  136,  137,  119,  120,  136,  137,
 
-      119,  120,  132,  133,  119,  120,  132,  133,  119,  120,
-      132,  133,  119,  120,  132,  133,  118,  132,  133,  130,
-      132,  133,    9,  132,  133,    6,  133,    6,  132,  133,
-        8,  132,  133,    8,  132,  133,   11,   13,  132,  133,
-       11,  133,   13,  132,  133,   13,  132,  133,   13,  132,
-      133,   21,  132,  133,   21,  133,   22,  132,  133,   16,
-      132,  133,   16,  133,   18,  132,  133,   18,  132,  133,
-       14,  132,  133,   15,  132,  133,   25,   27,  132,  133,
-       27,  132,  133,   28,  133,   25,   26,   27,  132,  133,
-       25,   26,   27,  132,  133,  124,  132,  133,  125,  132,
+      119,  120,  136,  137,  119,  120,  136,  137,  119,  120,
+      136,  137,  119,  120,  136,  137,  118,  136,  137,  134,
+      136,  137,    9,  136,  137,    6,  137,    6,  136,  137,
+        8,  136,  137,    8,  136,  137,   11,   13,  136,  137,
+       11,  137,   13,  136,  137,   13,  136,  137,   13,  136,
+      137,   21,  136,  137,   21,  137,   22,  136,  137,   16,
+      136,  137,   16,  137,   18,  136,  137,   18,  136,  137,
+       14,  136,  137,   15,  136,  137,   25,   27,  136,  137,
+       27,  136,  137,   28,  137,   25,   26,   27,  136,  137,
+       25,   26,   27,  136,  137,  129,  136,  137,  129,  137,
 
-      133,  125,  133,  132,  133,  126,  132,  133,  127,   19,
-       19,  116,  117,    5,   31,  123,   10,   32,  119,  120,
-      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
-      120,  119,  120,  119,  120,  119,  120,  119,  120,   43,
-      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
-      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
-      120,  120,  119,  120,  119,  120,  119,  120,  119,  120,
-      119,  120,  119,  120,  119,  120,  119,  120,  120,  119,
-      120,  119,  120,   88,  119,  120,  119,  120,  120,  119,
-      120,  119,  120,  119,  120,  119,  120,  120,  119,  120,
-
-      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
-      119,  120,  119,  120,  120,  119,  120,  119,  120,  120,
-      120,  119,  120,  118,    9,    7,    7,   12,   21,   20,
-       16,   25,   25,   26,   25,   26,  124,  125,  131,  116,
-      117,   31,  122,  121,  119,  120,  120,  119,  120,   35,
-      119,  120,   36,  119,  120,  119,  120,  119,  120,  119,
-      120,   40,  119,  120,  119,  120,  119,  120,  119,  120,
-      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
-      119,  120,  119,  120,   57,  119,  120,  119,  120,  119,
-      120,  119,  120,  119,  120,  119,  120,  119,  120,  120,
-
-      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
-      120,  119,  120,  119,  120,   80,  119,  120,   81,  119,
-      120,  119,  120,  120,  119,  120,  119,  120,  119,  120,
-      120,  119,  120,   91,  119,  120,  119,  120,  119,  120,
-      119,  120,  120,  119,  120,  119,  120,  119,  120,   99,
-      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
-      119,  120,  119,  120,  120,  119,  120,  119,  120,  119,
-      120,  120,  120,  120,  119,  120,  118,    3,   17,   25,
-       26,   24,   25,   26,  116,  117,   30,   29,    2,    1,
-      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
-
-      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
-      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
-      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
-      119,  120,  119,  120,   65,  119,  120,  120,  120,  119,
-      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
-      120,  119,  120,  119,  120,  119,  120,   83,  119,  120,
-      120,  119,  120,  119,  120,  119,  120,  120,  119,  120,
-      119,  120,  119,  120,  119,  120,  120,   96,  119,  120,
-      119,  120,  119,  120,  100,  119,  120,  119,  120,  119,
-      120,  119,  120,  104,  119,  120,  106,  119,  120,  120,
-
-      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
-      120,  120,  120,  115,  119,  120,    3,   25,   26,  119,
-      120,  119,  120,  119,  120,   39,  119,  120,  120,  119,
-      120,  119,  120,  119,  120,   46,  119,  120,  119,  120,
-      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
-      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
-      119,  120,  119,  120,   64,  119,  120,  120,  120,  120,
-      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
-      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
-      120,  119,  120,   87,  119,  120,  119,  120,  120,  119,
-
-      120,  119,  120,  119,  120,  120,  119,  120,  119,  120,
-      119,  120,  119,  120,  120,  120,  107,  119,  120,  119,
-      120,  119,  120,  120,  119,  120,  120,  120,  120,  128,
-       25,   26,   34,  119,  120,  119,  120,  119,  120,  120,
-      119,  120,  119,  120,   45,  119,  120,  119,  120,  119,
-      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
-      120,  119,  120,  119,  120,  119,  120,   59,  119,  120,
-      119,  120,  119,  120,  119,  120,  119,  120,  120,  120,
-      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
-      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
-
-      120,  120,   85,  119,  120,  119,  120,  120,  119,  120,
+      136,  137,  125,  136,  137,  136,  137,  136,  137,  124,
+      136,  137,  127,  136,  137,  128,  136,  137,  126,  136,
+      137,  130,  136,  137,  131,   19,   19,  116,  117,    5,
+       31,  123,   10,   32,  119,  120,  119,  120,  119,  120,
       119,  120,  119,  120,  119,  120,  120,  119,  120,  119,
-      120,  101,  119,  120,  102,  119,  120,  120,  120,  108,
-      119,  120,  119,  120,  120,  120,  120,  120,  120,   25,
-       26,  119,  120,  119,  120,  120,   42,  119,  120,  119,
-      120,  119,  120,  119,  120,  119,  120,   51,  119,  120,
-       52,  119,  120,  119,  120,  119,  120,   55,  119,  120,
-      119,  120,  119,  120,  119,  120,   61,  119,  120,  119,
-      120,  119,  120,  120,  120,  120,  119,  120,  119,  120,
-       72,  119,  120,   73,  119,  120,  119,  120,  119,  120,
+      120,  119,  120,  119,  120,   43,  119,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  120,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,  120,  119,  120,  119,  120,   88,
 
-      119,  120,   77,  119,  120,  119,  120,  119,  120,  119,
-      120,  120,  119,  120,  120,   90,  119,  120,  119,  120,
-       93,  119,  120,   95,  119,  120,  120,  119,  120,  119,
-      120,  120,  120,  119,  120,  111,  120,  120,  120,  120,
-      120,   25,   26,  119,  120,  119,  120,  120,  119,  120,
-      119,  120,  119,  120,  119,  120,  119,  120,   54,  119,
-      120,  119,  120,  119,  120,   60,  119,  120,  119,  120,
-       63,  119,  120,  120,  120,  120,  120,  119,  120,   71,
-      119,  120,   74,  119,  120,   75,  119,  120,  119,  120,
-      119,  120,  120,  119,  120,  120,   89,  119,  120,  120,
-
-      119,  120,  120,  119,  120,   98,  119,  120,  120,  120,
-      119,  120,  120,  120,  120,  120,   25,   26,  119,  120,
-       38,  119,  120,   41,  120,   44,  119,  120,   47,  119,
+      119,  120,  119,  120,  120,  119,  120,  119,  120,  119,
+      120,  119,  120,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+      120,  119,  120,  119,  120,  120,  120,  119,  120,  118,
+        9,    7,    7,   12,   21,   20,   16,   25,   25,   26,
+       25,   26,  129,    5,  124,  135,  116,  117,   31,  122,
+      121,  119,  120,  120,  119,  120,   35,  119,  120,   36,
+      119,  120,  119,  120,  119,  120,  119,  120,   40,  119,
       120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
-      120,  120,  120,  120,   69,  120,  119,  120,  119,  120,
-      119,  120,  120,  119,  120,  120,  120,  119,  120,  120,
-      103,  120,  120,  109,  119,  120,  120,  120,  120,  120,
-      129,   25,  119,  120,   48,  119,  120,  119,  120,   50,
-      119,  120,  119,  120,  119,  120,   58,  119,  120,  119,
-      120,  120,  120,  120,   70,  119,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
 
-      120,  120,  119,  120,  120,  120,  119,  120,  120,  119,
-      120,  120,  112,  120,  120,  120,  120,   25,   37,  119,
-      120,   49,  119,  120,   53,  119,  120,  119,  120,  119,
-      120,  120,  120,  120,  119,  120,  119,  120,  120,  119,
-      120,  120,  120,  119,  120,  120,  119,  120,  120,  120,
-      120,  120,   25,  119,  120,  119,  120,  120,  120,  120,
-       76,  119,  120,   78,  119,  120,   79,  120,  119,  120,
-      120,  120,  119,  120,  120,   97,  119,  120,  120,  120,
-      120,  120,   25,  119,  120,   62,  119,  120,   67,  120,
-      120,   68,  120,  119,  120,   84,  120,  120,   92,  119,
+      120,   57,  119,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  120,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,   80,  119,  120,   81,  119,  120,  119,  120,
+      120,  119,  120,  119,  120,  119,  120,  120,  119,  120,
+       91,  119,  120,  119,  120,  119,  120,  119,  120,  120,
+      119,  120,  119,  120,  119,  120,   99,  119,  120,  119,
+      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
+      120,  120,  119,  120,  119,  120,  119,  120,  120,  120,
+      120,  119,  120,  118,    3,   17,   25,   26,   24,   25,
 
-      120,  120,  105,  120,  120,  120,  114,  120,   25,  119,
-      120,  120,   82,  119,  120,  120,  120,  120,  113,  120,
-       25,  119,  120,   66,  120,  120,   94,  120,  110,  120,
-       25,   56,  119,  120,   86,  120,   23,   25,    4
+       26,  124,  116,  117,   30,   29,    2,    1,  119,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,   65,  119,  120,  120,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,   83,  119,  120,  120,  119,
+      120,  119,  120,  119,  120,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,  120,   96,  119,  120,  119,  120,
+
+      119,  120,  100,  119,  120,  119,  120,  119,  120,  119,
+      120,  104,  119,  120,  106,  119,  120,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  120,  120,
+      120,  115,  119,  120,    3,   25,   26,  119,  120,  119,
+      120,  119,  120,   39,  119,  120,  120,  119,  120,  119,
+      120,  119,  120,   46,  119,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,   64,  119,  120,  120,  120,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+
+      119,  120,  119,  120,  119,  120,  119,  120,  120,  119,
+      120,   87,  119,  120,  119,  120,  120,  119,  120,  119,
+      120,  119,  120,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,  120,  120,  107,  119,  120,  119,  120,  119,
+      120,  120,  119,  120,  120,  120,  120,  132,   25,   26,
+       34,  119,  120,  119,  120,  119,  120,  120,  119,  120,
+      119,  120,   45,  119,  120,  119,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,   59,  119,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  120,  120,  120,  119,
+
+      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,  119,  120,  119,  120,  120,
+       85,  119,  120,  119,  120,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,  120,  119,  120,  119,  120,  101,
+      119,  120,  102,  119,  120,  120,  120,  108,  119,  120,
+      119,  120,  120,  120,  120,  120,  120,   25,   26,  119,
+      120,  119,  120,  120,   42,  119,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,   51,  119,  120,   52,  119,
+      120,  119,  120,  119,  120,   55,  119,  120,  119,  120,
+      119,  120,  119,  120,   61,  119,  120,  119,  120,  119,
+
+      120,  120,  120,  120,  119,  120,  119,  120,   72,  119,
+      120,   73,  119,  120,  119,  120,  119,  120,  119,  120,
+       77,  119,  120,  119,  120,  119,  120,  119,  120,  120,
+      119,  120,  120,   90,  119,  120,  119,  120,   93,  119,
+      120,   95,  119,  120,  120,  119,  120,  119,  120,  120,
+      120,  119,  120,  111,  120,  120,  120,  120,  120,   25,
+       26,  119,  120,  119,  120,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,   54,  119,  120,  119,
+      120,  119,  120,   60,  119,  120,  119,  120,   63,  119,
+      120,  120,  120,  120,  120,  119,  120,   71,  119,  120,
+
+       74,  119,  120,   75,  119,  120,  119,  120,  119,  120,
+      120,  119,  120,  120,   89,  119,  120,  120,  119,  120,
+      120,  119,  120,   98,  119,  120,  120,  120,  119,  120,
+      120,  120,  120,  120,   25,   26,  119,  120,   38,  119,
+      120,   41,  120,   44,  119,  120,   47,  119,  120,  119,
+      120,  119,  120,  119,  120,  119,  120,  119,  120,  120,
+      120,  120,   69,  120,  119,  120,  119,  120,  119,  120,
+      120,  119,  120,  120,  120,  119,  120,  120,  103,  120,
+      120,  109,  119,  120,  120,  120,  120,  120,  133,   25,
+      119,  120,   48,  119,  120,  119,  120,   50,  119,  120,
+
+      119,  120,  119,  120,   58,  119,  120,  119,  120,  120,
+      120,  120,   70,  119,  120,  119,  120,  119,  120,  120,
+      119,  120,  120,  120,  119,  120,  120,  119,  120,  120,
+      112,  120,  120,  120,  120,   25,   37,  119,  120,   49,
+      119,  120,   53,  119,  120,  119,  120,  119,  120,  120,
+      120,  120,  119,  120,  119,  120,  120,  119,  120,  120,
+      120,  119,  120,  120,  119,  120,  120,  120,  120,  120,
+       25,  119,  120,  119,  120,  120,  120,  120,   76,  119,
+      120,   78,  119,  120,   79,  120,  119,  120,  120,  120,
+      119,  120,  120,   97,  119,  120,  120,  120,  120,  120,
+
+       25,  119,  120,   62,  119,  120,   67,  120,  120,   68,
+      120,  119,  120,   84,  120,  120,   92,  119,  120,  120,
+      105,  120,  120,  120,  114,  120,   25,  119,  120,  120,
+       82,  119,  120,  120,  120,  120,  113,  120,   25,  119,
+      120,   66,  120,  120,   94,  120,  110,  120,   25,   56,
+      119,  120,   86,  120,   23,   25,    4
     } ;
 
-static yyconst short int yy_accept[727] =
+static yyconst short int yy_accept[736] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    2,    4,    7,
@@ -463,79 +465,80 @@
        73,   77,   81,   85,   89,   93,   97,  101,  105,  109,
       113,  117,  120,  123,  126,  128,  131,  134,  137,  141,
       143,  146,  149,  152,  155,  157,  160,  163,  165,  168,
-      171,  174,  177,  181,  184,  186,  191,  196,  199,  202,
-      204,  206,  209,  209,  210,  211,  212,  212,  213,  213,
-      214,  214,  214,  215,  216,  217,  218,  219,  219,  219,
+      171,  174,  177,  181,  184,  186,  191,  196,  199,  201,
+      203,  206,  208,  210,  213,  216,  219,  222,  225,  225,
+      226,  227,  228,  228,  229,  229,  230,  230,  230,  231,
 
-      221,  223,  225,  227,  229,  231,  232,  234,  236,  238,
-      240,  243,  245,  247,  249,  251,  253,  255,  257,  259,
-      261,  262,  263,  265,  267,  269,  271,  273,  275,  277,
-      279,  280,  282,  284,  287,  289,  290,  292,  294,  296,
-      298,  299,  301,  303,  305,  307,  309,  311,  313,  315,
-      316,  318,  320,  321,  322,  324,  324,  325,  325,  325,
-      325,  326,  327,  328,  329,  330,  331,  332,  332,  333,
-      335,  337,  338,  339,  340,  340,  340,  341,  341,  342,
-      342,  342,  342,  342,  343,  344,  345,  347,  348,  350,
-      353,  356,  358,  360,  360,  362,  365,  367,  369,  371,
+      232,  233,  234,  235,  235,  235,  237,  239,  241,  243,
+      245,  247,  248,  250,  252,  254,  256,  259,  261,  263,
+      265,  267,  269,  271,  273,  275,  277,  278,  279,  281,
+      283,  285,  287,  289,  291,  293,  295,  296,  298,  300,
+      303,  305,  306,  308,  310,  312,  314,  315,  317,  319,
+      321,  323,  325,  327,  329,  331,  332,  334,  336,  337,
+      338,  340,  340,  341,  341,  341,  341,  342,  343,  344,
+      345,  346,  347,  348,  348,  349,  351,  353,  354,  355,
+      355,  356,  357,  357,  357,  358,  358,  359,  359,  359,
+      359,  359,  360,  361,  362,  364,  365,  367,  370,  373,
 
-      373,  375,  377,  379,  381,  383,  385,  388,  390,  392,
-      394,  396,  398,  400,  401,  402,  404,  406,  408,  410,
-      412,  414,  416,  419,  422,  424,  425,  427,  429,  431,
-      432,  434,  437,  439,  441,  443,  444,  446,  448,  450,
-      453,  455,  457,  459,  461,  463,  465,  466,  468,  470,
-      472,  473,  474,  475,  477,  478,  478,  478,  479,  480,
-      482,  485,  485,  486,  487,  488,  489,  490,  491,  491,
-      491,  491,  493,  495,  497,  499,  501,  503,  505,  507,
+      375,  377,  377,  379,  382,  384,  386,  388,  390,  392,
+      394,  396,  398,  400,  402,  405,  407,  409,  411,  413,
+      415,  417,  418,  419,  421,  423,  425,  427,  429,  431,
+      433,  436,  439,  441,  442,  444,  446,  448,  449,  451,
+      454,  456,  458,  460,  461,  463,  465,  467,  470,  472,
+      474,  476,  478,  480,  482,  483,  485,  487,  489,  490,
+      491,  492,  494,  495,  495,  495,  496,  497,  499,  502,
+      503,  503,  504,  505,  506,  507,  508,  509,  509,  509,
       509,  511,  513,  515,  517,  519,  521,  523,  525,  527,
-      529,  531,  533,  535,  538,  539,  540,  542,  544,  546,
+      529,  531,  533,  535,  537,  539,  541,  543,  545,  547,
 
-      548,  550,  552,  554,  556,  558,  561,  562,  564,  566,
-      568,  569,  571,  573,  575,  577,  578,  581,  583,  585,
-      588,  590,  592,  594,  597,  600,  601,  603,  605,  607,
-      609,  611,  612,  613,  614,  617,  617,  617,  617,  617,
-      618,  620,  620,  622,  624,  626,  629,  630,  632,  634,
-      636,  639,  641,  643,  645,  647,  649,  651,  653,  655,
-      657,  659,  661,  663,  665,  668,  669,  670,  671,  673,
-      675,  677,  679,  681,  683,  685,  687,  689,  691,  692,
-      694,  697,  699,  700,  702,  702,  704,  706,  707,  709,
-      711,  713,  715,  716,  717,  720,  722,  724,  725,  727,
+      549,  551,  553,  556,  557,  558,  560,  562,  564,  566,
+      568,  570,  572,  574,  576,  579,  580,  582,  584,  586,
+      587,  589,  591,  593,  595,  596,  599,  601,  603,  606,
+      608,  610,  612,  615,  618,  619,  621,  623,  625,  627,
+      629,  630,  631,  632,  635,  635,  635,  635,  635,  636,
+      638,  638,  640,  642,  644,  647,  648,  650,  652,  654,
+      657,  659,  661,  663,  665,  667,  669,  671,  673,  675,
+      677,  679,  681,  683,  686,  687,  688,  689,  691,  693,
+      695,  697,  699,  701,  703,  705,  707,  709,  710,  712,
+      715,  717,  718,  720,  720,  722,  724,  725,  727,  729,
 
-      728,  729,  730,  730,  730,  731,  733,  733,  736,  738,
-      740,  741,  743,  745,  748,  750,  752,  754,  756,  758,
-      760,  762,  764,  766,  768,  771,  773,  775,  777,  779,
-      780,  781,  782,  784,  786,  788,  790,  792,  794,  796,
-      798,  800,  802,  802,  803,  806,  808,  809,  811,  813,
-      815,  817,  818,  820,  822,  825,  828,  829,  830,  833,
-      835,  836,  837,  838,  839,  840,  840,  840,  842,  842,
-      844,  846,  847,  850,  852,  854,  856,  858,  861,  864,
-      866,  868,  871,  873,  875,  877,  880,  882,  884,  885,
-      886,  887,  889,  891,  894,  897,  899,  901,  903,  906,
+      731,  733,  734,  735,  738,  740,  742,  743,  745,  746,
+      747,  748,  748,  748,  749,  751,  751,  754,  756,  758,
+      759,  761,  763,  766,  768,  770,  772,  774,  776,  778,
+      780,  782,  784,  786,  789,  791,  793,  795,  797,  798,
+      799,  800,  802,  804,  806,  808,  810,  812,  814,  816,
+      818,  820,  820,  821,  824,  826,  827,  829,  831,  833,
+      835,  836,  838,  840,  843,  846,  847,  848,  851,  853,
+      854,  855,  856,  857,  858,  858,  858,  860,  860,  862,
+      864,  865,  868,  870,  872,  874,  876,  879,  882,  884,
+      886,  889,  891,  893,  895,  898,  900,  902,  903,  904,
 
-      908,  910,  912,  913,  915,  916,  919,  921,  924,  927,
-      928,  930,  932,  933,  934,  936,  938,  939,  940,  941,
-      942,  942,  944,  944,  946,  948,  949,  951,  953,  955,
-      957,  959,  962,  964,  966,  969,  971,  974,  975,  976,
-      977,  978,  980,  983,  986,  989,  991,  993,  994,  996,
-      997, 1000, 1001, 1003, 1004, 1006, 1009, 1010, 1011, 1013,
-     1014, 1015, 1016, 1017, 1017, 1017, 1019, 1019, 1021, 1024,
-     1026, 1029, 1032, 1034, 1036, 1038, 1038, 1040, 1042, 1043,
-     1044, 1045, 1047, 1049, 1051, 1053, 1054, 1056, 1057, 1058,
-     1060, 1061, 1061, 1063, 1064, 1067, 1068, 1069, 1070, 1071,
+      905,  907,  909,  912,  915,  917,  919,  921,  924,  926,
+      928,  930,  931,  933,  934,  937,  939,  942,  945,  946,
+      948,  950,  951,  952,  954,  956,  957,  958,  959,  960,
+      960,  962,  962,  964,  966,  967,  969,  971,  973,  975,
+      977,  980,  982,  984,  987,  989,  992,  993,  994,  995,
+      996,  998, 1001, 1004, 1007, 1009, 1011, 1012, 1014, 1015,
+     1018, 1019, 1021, 1022, 1024, 1027, 1028, 1029, 1031, 1032,
+     1033, 1034, 1035, 1035, 1035, 1037, 1037, 1039, 1042, 1044,
+     1047, 1050, 1052, 1054, 1056, 1056, 1058, 1060, 1061, 1062,
+     1063, 1065, 1067, 1069, 1071, 1072, 1074, 1075, 1076, 1078,
 
-     1071, 1072, 1073, 1073, 1075, 1078, 1080, 1083, 1085, 1087,
-     1090, 1092, 1093, 1094, 1095, 1098, 1100, 1102, 1103, 1105,
-     1106, 1107, 1109, 1110, 1112, 1113, 1115, 1116, 1117, 1118,
-     1119, 1119, 1122, 1125, 1128, 1130, 1132, 1133, 1134, 1135,
-     1137, 1139, 1140, 1142, 1143, 1144, 1146, 1147, 1149, 1150,
-     1151, 1152, 1153, 1154, 1154, 1156, 1158, 1159, 1160, 1161,
-     1164, 1167, 1169, 1171, 1172, 1173, 1175, 1176, 1179, 1180,
-     1181, 1182, 1183, 1184, 1184, 1186, 1189, 1191, 1192, 1194,
-     1196, 1198, 1199, 1202, 1203, 1205, 1206, 1207, 1209, 1210,
-     1210, 1212, 1213, 1216, 1217, 1218, 1219, 1221, 1222, 1222,
+     1079, 1079, 1081, 1082, 1085, 1086, 1087, 1088, 1089, 1089,
+     1090, 1091, 1091, 1093, 1096, 1098, 1101, 1103, 1105, 1108,
+     1110, 1111, 1112, 1113, 1116, 1118, 1120, 1121, 1123, 1124,
+     1125, 1127, 1128, 1130, 1131, 1133, 1134, 1135, 1136, 1137,
+     1137, 1140, 1143, 1146, 1148, 1150, 1151, 1152, 1153, 1155,
+     1157, 1158, 1160, 1161, 1162, 1164, 1165, 1167, 1168, 1169,
+     1170, 1171, 1172, 1172, 1174, 1176, 1177, 1178, 1179, 1182,
+     1185, 1187, 1189, 1190, 1191, 1193, 1194, 1197, 1198, 1199,
+     1200, 1201, 1202, 1202, 1204, 1207, 1209, 1210, 1212, 1214,
+     1216, 1217, 1220, 1221, 1223, 1224, 1225, 1227, 1228, 1228,
 
-     1224, 1226, 1227, 1229, 1231, 1232, 1232, 1235, 1237, 1239,
-     1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
-     1239, 1239, 1239, 1239, 1240, 1240
+     1230, 1231, 1234, 1235, 1236, 1237, 1239, 1240, 1240, 1242,
+     1244, 1245, 1247, 1249, 1250, 1250, 1253, 1255, 1257, 1257,
+     1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
+     1257, 1257, 1257, 1258, 1258
     } ;
 
 static yyconst int yy_ec[256] =
@@ -549,11 +552,11 @@
        27,   28,    1,   10,   29,   30,   31,   32,   33,   34,
        35,   36,   37,   38,   39,   40,   41,   42,   43,   44,
        45,   46,   47,   48,   49,   50,   51,   52,   53,   54,
-       10,    1,   55,   56,    1,    1,   57,   58,   59,   60,
+       55,    1,   56,   57,    1,    1,   58,   59,   60,   61,
 
-       61,   62,   63,   64,   65,   66,   62,   67,   68,   69,
-       70,   71,   62,   72,   73,   74,   75,   76,   62,   77,
-       62,   78,   79,   80,   81,    1,    1,    1,    1,    1,
+       62,   63,   64,   65,   66,   67,   63,   68,   69,   70,
+       71,   72,   63,   73,   74,   75,   76,   77,   63,   78,
+       63,   79,   80,   81,   82,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -570,686 +573,693 @@
         1,    1,    1,    1,    1
     } ;
 
-static yyconst int yy_meta[82] =
+static yyconst int yy_meta[83] =
     {   0,
-        1,    2,    3,    4,    4,    1,    5,    6,    7,    1,
-        1,    1,    8,    1,    1,    9,    9,    9,    9,    9,
-        9,    9,    9,   10,    1,    1,   10,    1,   11,   11,
-       11,   11,   11,   11,   12,   12,   12,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
-       12,   12,   12,   12,    1,    1,   12,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,   12,   12,   13,    1,
-       14
+        1,    2,    3,    4,    4,    1,    5,    1,    6,    1,
+        1,    1,    7,    1,    1,    8,    8,    8,    8,    8,
+        8,    8,    8,    9,    1,    1,    9,    1,   10,   10,
+       10,   10,   10,   10,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   11,    1,    1,    1,   11,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   12,
+        1,   13
     } ;
 
-static yyconst short int yy_base[752] =
+static yyconst short int yy_base[761] =
     {   0,
-        0,    0,   79,   82,   85,   96,   91,   93,   90,  100,
-       88,  102,  183,  264,  120,  133, 1529, 1519,  140,  148,
-     1518, 1516,  337,  156, 4350,  157, 1507,  102, 4350,  201,
-     1495, 4350,  403,  200,  263,  281,  206,  287,  452,   90,
-      308,  458,  185,  474,  496,  497,  514,  531,  534,  549,
-      557, 1505,  605,    0, 4350, 4350, 1504, 1503, 4350, 4350,
-     1500, 1503, 4350,    0,    0, 1492,    0,    0, 1472, 4350,
-     4350, 4350,    0, 4350, 4350,  628,  708,    0,  200,  278,
-      276, 4350, 1488,  356,    0, 1486, 1484, 1465,   91, 1464,
-      642, 1466,  101,  644, 1457, 4350,  652, 1442,  732,  646,
+        0,    0,   80,   83,   86,   97,   92,   94,   91,  101,
+       89,  103,  185,  267,  349,    0, 1572, 1561,  119,  129,
+     1557, 1555,  423,  137, 4413,  138, 1548,  103, 4413,  156,
+     1537, 4413,  490,  184,  208,  190,  257,  285,  540,  205,
+      546,  567,  561,  277,  585,  600,  606,  631,  634,  623,
+      654, 1547,  697,    0, 4413, 4413, 1546, 1540, 4413, 4413,
+     1536, 1538, 4413,    0,    0, 1541,    0,    0, 1522, 4413,
+     4413, 4413,    0, 4413, 4413,  720,  801,  160,  199,  110,
+     4413, 1529, 1529, 1526, 4413, 4413, 4413, 4413, 1531,  203,
+        0, 1530, 1525, 1514,   86, 1510,  433, 1512,  123,  321,
 
-      647,  662,  698,  663,  697, 1454,  713,  726,  729,  737,
-      781,  784,  802,  799,  815,  823,  838,  844,  841,  859,
-      187,   97,  874,  877,  885,  900,  911,  922,  928,  939,
-      158,  952,  955,  968,  976,  169,  979,  992, 1003, 1016,
-      219, 1032, 1038, 1049, 1055, 1066, 1077, 1083, 1094,  241,
-     1100, 1116,  239,  274, 1115,    0, 1453, 1164, 1176, 1188,
-        0, 4350, 1452, 4350,    0, 4350,    0, 1437,    0, 1416,
-      322,    0,  425, 4350, 1443,    0, 1441,    0, 1440,  110,
-     1415,  297,  119, 1154, 4350, 4350, 1199, 1434, 1183, 1184,
-     1199, 1200, 1248, 1432, 1256, 1259, 1272, 1280, 1288, 1296,
+     1506, 4413,  689, 1487,  825,  709,  710,  725,  738,  741,
+      756, 1499,  800,  806,  821,  829,  875,  878,  896,  893,
+      909,  917,  932,  938,  935,  953,  112,  157,  968,  971,
+      979,  994, 1005, 1016, 1022, 1033,  153, 1046, 1049, 1062,
+     1070,  113, 1073, 1086, 1097, 1110,  102, 1126, 1132, 1143,
+     1149, 1160, 1171, 1177, 1188,  116, 1194, 1210,  218,  242,
+     1209,    0, 1493, 1258, 1270, 1282,    0, 4413, 1491, 4413,
+        0, 4413,    0, 1476,    0, 1455,  254,  256, 4413,    0,
+     1480, 4413, 1478,    0, 1477,    0, 1476,  114, 1451,  299,
+      214,  801, 4413, 4413, 1293, 1471, 1277, 1278, 1293, 1294,
 
-     1309, 1317, 1320, 1341, 1342, 1357, 1363, 1374, 1380, 1391,
-     1397, 1408, 1419,  200,  215, 1432, 1440, 1443, 1458, 1461,
-     1464, 1490, 1482, 1493, 1506,  281, 1514, 1527, 1535,  302,
-     1538, 1551, 1559, 1567, 1575,  244, 1588, 1591, 1599, 1612,
-     1620, 1628, 1636, 1649, 1657, 1670,  445, 1678, 1694, 1695,
-      155,  470,  352, 1710, 1431, 1753, 1761, 1430, 4350,  113,
-     1400, 1381, 1419, 1415, 4350, 4350, 4350, 4350,  486,  293,
-     1379, 1755, 1756, 1771, 1777, 1788, 1794, 1810, 1811, 1826,
-     1834, 1842, 1858, 1855, 1866, 1879, 1882, 1897, 1903, 1914,
-     1920, 1931, 1946, 1952,  246,  232, 1963, 1969, 1984, 1985,
+     1343, 1470, 1351, 1354, 1367, 1375, 1383, 1391, 1404, 1412,
+     1415, 1436, 1437, 1452, 1458, 1469, 1475, 1486, 1492, 1503,
+     1514,  243,  216, 1527, 1535, 1538, 1553, 1556, 1559, 1585,
+     1577, 1588, 1601,  251, 1609, 1622, 1630,  270, 1633, 1646,
+     1654, 1662, 1670,  240, 1683, 1686, 1694, 1707, 1715, 1723,
+     1731, 1744, 1752, 1765,  532, 1773, 1789, 1790,  104,  558,
+      223, 1805, 1462, 1848, 1856, 1461, 4413,  220, 1430, 1458,
+     1413, 1455, 1447, 4413, 4413, 4413, 4413,  315,  217, 1411,
+     1850, 1851, 1866, 1872, 1883, 1889, 1905, 1906, 1921, 1929,
+     1937, 1953, 1950, 1961, 1974, 1977, 1992, 1998, 2009, 2015,
 
-     2000, 2006, 2021, 2024, 2032, 2045,  418, 2053, 2056, 2069,
-      105, 2077, 2090, 2098, 2106,  446, 2114, 2122, 2135, 2143,
-     2146, 2164, 2161, 2167, 2182,  496, 2185, 2188, 2203, 2209,
-     2220,  472,  322,  193, 2226, 2274, 2296, 2318, 2330, 1412,
-      309, 1377, 2314, 2329, 2345, 2342,  471, 2363, 2366, 2369,
-     2384, 2387, 2395, 2408, 2416, 2429, 2440, 2446, 2457, 2468,
-     2483, 2489, 2500, 2506, 2521,  498,  484,  497, 2522, 2542,
-     2539, 2560, 2559, 2575, 2581, 2592, 2605, 2616,  516, 2613,
-     2629, 2637,  521, 2645,  480, 2653, 2666,  502, 2679, 2682,
-     2690, 2703,  540,  535, 2714, 2720, 2731,  522, 2742,  544,
+     2026, 2041, 2047,  431,  533, 2058, 2064, 2079, 2080, 2095,
+     2101, 2116, 2119, 2127, 2140,  432, 2148, 2151, 2164,  559,
+     2172, 2185, 2193, 2201,  502, 2209, 2217, 2230, 2238, 2241,
+     2259, 2256, 2262, 2277,  504, 2280, 2283, 2300, 2306, 2317,
+      560,  503,  420, 2333, 2376, 2398, 2420, 2432, 1437,  303,
+     1407, 2416, 2432, 2448, 2417,  568, 2454, 2469, 2472, 2480,
+     2493, 2501, 2509, 2522, 2530, 2543, 2551, 2559, 2567, 2582,
+     2588, 2599, 2605, 2620,  534,  572,  593, 2621, 2641, 2638,
+     2659, 2658, 2674, 2680, 2691, 2704, 2715,  613, 2712, 2728,
+     2736,  570, 2744,  586, 2752, 2765,  599, 2778, 2781, 2789,
 
-      537,  499,  677, 2785, 4350,  563, 1400, 2769, 2785, 2782,
-      552, 2793, 2806, 2809, 2826, 2832, 2843, 2849, 2864, 2870,
-     2887, 2893, 2904, 2910, 2921, 2927, 2938, 2944, 2960,  618,
-      559,  635, 2961, 2976, 2982, 2993, 2999, 3014, 3020, 3031,
-     3046, 3052,  620,  571, 3063, 3079,  296, 3076, 1369, 3087,
-     3100,  591, 3108, 3123, 3126, 3129,  665,  508, 3144, 3147,
-      589,  688,  711,  700,  759, 3195, 3207, 1367, 1377, 3191,
-     3204,  685, 3207, 3222, 3228, 3239, 3245, 3256, 3262, 3273,
-     3284, 3290, 3301, 3307, 3318, 3329, 3335, 3346,  684,  573,
-      713, 3352, 3363, 3374, 3380, 3391, 3397, 3412, 3413, 3428,
+     2802,  595,  608, 2813, 2819, 2830,  277, 2841,  615,  587,
+      619,  759, 2884, 4413,  397, 1430, 2868, 2884, 2881,  656,
+     2892, 2905, 2908, 2925, 2931, 2942, 2948, 2963, 2969, 2986,
+     2992, 3003, 3009, 3020, 3026, 3037, 3043, 3059,  622,  682,
+      672, 3060, 3075, 3081, 3092, 3098, 3113, 3119, 3130, 3145,
+     3151,  723,  710, 3162, 3178,  711, 3175, 1401, 3186, 3199,
+      638, 3207, 3222, 3225, 3228,  728,  753, 3243, 3246,  771,
+      724,  760,  775,  776, 3294, 3306, 1399, 1408, 3290, 3303,
+      611, 3306, 3321, 3327, 3338, 3344, 3355, 3361, 3372, 3383,
+     3389, 3400, 3406, 3417, 3428, 3434, 3445,  862,  759,  782,
 
-     3434, 1360,  697, 3445,  774, 3451, 1364, 3462, 3473,  716,
-     3479, 3494,  804,  772, 3500, 1383,  841,  575,  739,  805,
-     3543,  780,    0, 3537, 3538,  799, 3553, 3561, 3564, 3577,
-     3585, 3593, 3601, 3614, 3622, 3630, 3638,  763,  834,  821,
-      837, 3651, 3659, 3662, 3675, 3683, 3686,  825, 1361,  848,
-     3699,  823, 1357,  863, 3720, 3707,  896,  864, 3723,  866,
-      853,  885,  915, 3771, 1035,  120, 1346, 3755, 3766, 1376,
-     3772, 3783, 3789, 3804, 3805,  926, 3820, 3821,  878,  900,
-      930, 1375, 3836, 3844, 3859,  898, 1343,  933,  932, 1337,
-      920,  313, 1364,  943, 3860,  923,  960,  952,  963, 1232,
+     3451, 3462, 3473, 3479, 3490, 3496, 3511, 3512, 3527, 3533,
+     1396,  819, 3544,  849, 3550, 1403, 3561, 3567,  779, 3582,
+     3588,  790,  832, 3604, 1423,  840,  634,  786,  863, 3638,
+      110,    0, 3632, 3633,  867, 3648, 3656, 3659, 3672, 3680,
+     3688, 3696, 3709, 3717, 3725, 3733,  854,  928,  855,  868,
+     3746, 3754, 3757, 3770, 3778, 3781,  766, 1396,  931, 3794,
+      899, 1389,  937, 3815, 3802,  903,  939, 3818,  900,  935,
+      942,  941, 3866, 1027,  943, 1376, 3850, 3861, 1407, 3867,
+     3878, 3884, 3899, 3900,  987, 3915, 3916,  977,  978, 1014,
+     1405, 3931, 3939, 3954, 1042, 1375, 1026, 1009, 1368,  947,
 
-     4350, 1345, 1313, 3875, 3876, 3891, 3892, 3907, 1320, 3908,
-     3923,  965,  845,  998, 3929, 3940, 3951,  924, 1313, 1001,
-      987, 1317,  974, 1315, 1037, 1335, 1016, 1042, 1044, 1303,
-     1273, 3957, 3968, 3974, 1301, 3985,  962, 1057, 1000, 3996,
-     4002, 1098, 1305, 1031, 1064, 1293, 1079, 1295, 1051, 1118,
-     1126, 1109, 1283, 1245, 1263, 4017, 1099, 1166, 1139, 4018,
-     4033, 1296, 1239, 1140, 1062, 1231, 1188,    0, 1232, 1239,
-     1225, 1268, 1235, 1221, 1209, 4034, 1241, 1060, 1234, 1193,
-     1207, 1141,    0, 1237, 1206, 1238, 1272, 1205, 1171, 1075,
-     1092, 1128,    0, 1209, 1302, 1310, 1075, 1041, 1010, 1027,
+      643, 1395, 1059, 3955, 1061,  958, 1048, 1065, 1243, 4413,
+     1375, 1342, 3970, 3971, 3986, 3987, 4002, 1359, 4003, 4018,
+     1054, 1020, 1067, 4024, 4035, 4046, 1013, 1357, 1083, 1072,
+     1352, 1088, 1343, 1092, 1366, 1094, 1111, 1116, 1335, 1305,
+     4052, 4063, 4069, 1334, 4080, 1024,  430, 1129, 4091, 4097,
+     1144, 1338, 1135, 1140, 1326, 1121, 1315, 1152, 1154, 1148,
+     1165, 1304, 1272, 1296, 4112, 1203, 1190, 1220, 4113, 4128,
+     1328, 1292, 1251,  979, 1261, 1229,    0, 1252, 1283, 1242,
+     1284, 1265, 1249, 1263, 4129, 1260, 1197, 1256, 1215, 1212,
+     1210,    0, 1258, 1183, 1259, 1318, 1151, 1105, 1070, 1088,
 
-     1041, 1208, 1038,  971,  940,  791,    0,  843,    0,  691,
-      590,  542,  569,  452,  454,  434,  412,  357,  267,  296,
-      697,  150,  118, 4350, 4350, 4083, 4097, 4111, 4125, 4139,
-     4153, 4167, 4180, 4184, 4196, 4210, 4224, 4236, 4248, 4260,
-     4265, 4270, 4274, 4279, 4283, 4287, 4291, 4303, 4310, 4322,
-     4335
+     1270,    0, 1158, 1326, 1337, 1046, 1014,  991,  906,  901,
+     1257,  864,  861,  753,  686,    0,  712,    0,  543,  489,
+      440,  407,  376,  380,  371,  365,  271,  257, 1042, 1158,
+      135,  124, 4413, 4413, 4178, 4191, 4204, 4217, 4230, 4243,
+     4255, 4259, 4270, 4283, 4296, 4307, 4318, 4323, 4328, 4333,
+     4337, 4342, 4346, 4350, 4354, 4358, 4369, 4376, 4387, 4399
     } ;
 
-static yyconst short int yy_def[752] =
+static yyconst short int yy_def[761] =
     {   0,
-      725,    1,  726,  726,  726,  726,  727,  727,  728,  728,
-      729,  729,  730,  730,  731,  731,  725,  725,  725,  725,
-      725,  732,  725,  733,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,   33,   33,   33,   33,   33,   33,   33,
+      734,    1,  735,  735,  735,  735,  736,  736,  737,  737,
+      738,  738,  739,  739,  734,   15,  734,  734,  734,  734,
+      734,  740,  734,  741,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,   33,   33,   33,   33,   33,   33,   33,
        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-       33,  734,  725,  735,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  736,  736,  725,  737,  737,  725,  725,
-      725,  725,  738,  725,  725,  739,  739,  740,  725,  725,
-       23,  725,  725,  725,  732,  732,  725,  741,  725,  742,
-      733,  733,  725,  725,  725,  725,  725,  725,  743,   33,
+       33,  742,  734,  743,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  744,  744,  734,  745,  745,  734,  734,
+      734,  734,  746,  734,  734,  747,  747,  734,  734,   23,
+      734,  734,  734,  748,  734,  734,  734,  734,  734,  734,
+      740,  740,  734,  749,  734,  750,  741,  741,  734,  734,
 
-       33,   33,   33,   33,   33,  744,   33,   33,   33,   33,
+      734,  734,  734,  734,  751,   33,   33,   33,   33,   33,
+       33,  752,   33,   33,   33,   33,   33,   33,   33,   33,
+       33,   33,   33,   33,   33,   33,  752,  752,   33,   33,
+       33,   33,   33,   33,   33,   33,  752,   33,   33,   33,
+       33,  752,   33,   33,   33,   33,  752,   33,   33,   33,
+       33,   33,   33,   33,   33,  752,   33,   33,  752,  752,
+       33,  753,  742,  734,  734,  734,  743,  734,  734,  734,
+      744,  734,  745,  734,  746,   77,   77,  734,  734,  754,
+      748,  734,  734,  755,  749,  756,  750,  734,  734,  757,
+      734,  734,  734,  734,  751,  758,   33,   33,   33,   33,
+
+       33,  758,   33,   33,   33,   33,   33,   33,   33,   33,
        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-      744,  744,   33,   33,   33,   33,   33,   33,   33,   33,
-      744,   33,   33,   33,   33,  744,   33,   33,   33,   33,
-      744,   33,   33,   33,   33,   33,   33,   33,   33,  744,
-       33,   33,  744,  744,   33,  745,  734,  725,  725,  725,
-      735,  725,  725,  725,  736,  725,  737,  725,  738,   77,
-       77,  740,  725,  725,  725,  746,  741,  747,  742,  725,
-      725,  748,  725,  725,  725,  725,  743,  749,   33,   33,
-       33,   33,   33,  749,   33,   33,   33,   33,   33,   33,
+       33,  752,  752,   33,   33,   33,   33,   33,   33,   33,
+       33,   33,   33,  752,   33,   33,   33,  752,   33,   33,
+       33,   33,   33,  752,   33,   33,   33,   33,   33,   33,
+       33,   33,   33,   33,  752,   33,   33,   33,  752,  752,
+      752,   33,  753,  734,  734,  734,  734,   77,   77,  754,
+      734,  755,  756,  734,  734,  734,  734,  757,  734,  734,
+       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
+       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
+
+       33,   33,   33,  752,  752,   33,   33,   33,   33,   33,
+       33,   33,   33,   33,   33,  752,   33,   33,   33,  752,
+       33,   33,   33,   33,  752,   33,   33,   33,   33,   33,
+       33,   33,   33,   33,  752,   33,   33,   33,   33,   33,
+      752,  752,  752,   33,  734,  734,  734,  734,  734,   77,
+      734,   33,   33,   33,   33,  752,   33,   33,   33,   33,
+       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
+       33,   33,   33,   33,  752,  752,  752,   33,   33,   33,
+       33,   33,   33,   33,   33,   33,   33,  752,   33,   33,
+       33,  752,   33,  195,   33,   33,  752,   33,   33,   33,
+
+       33,  752,  752,   33,   33,   33,  752,   33,  752,  752,
+      752,  734,  734,  734,   77,  734,   33,   33,   33,  752,
+       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
+       33,   33,   33,   33,   33,   33,   33,   33,  752,  752,
+      752,   33,   33,   33,   33,   33,   33,   33,   33,   33,
+       33,  195,  752,   33,   33,  752,   33,  195,   33,   33,
+      752,   33,   33,   33,   33,  752,  752,   33,   33,  752,
+      752,  752,  752,  752,  734,  734,   77,  734,   33,   33,
+      752,   33,   33,   33,   33,   33,   33,   33,   33,   33,
+       33,   33,   33,   33,   33,   33,   33,  752,  752,  752,
 
        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-       33,   33,   33,  744,  744,   33,   33,   33,   33,   33,
-       33,   33,   33,   33,   33,  744,   33,   33,   33,  744,
-       33,   33,   33,   33,   33,  744,   33,   33,   33,   33,
-       33,   33,   33,   33,   33,   33,  744,   33,   33,   33,
-      744,  744,  744,   33,  745,  725,  725,  725,  725,   77,
-       77,  725,  746,  747,  725,  725,  725,  725,  748,  725,
-      725,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-       33,   33,   33,   33,  744,  744,   33,   33,   33,   33,
+      195,  752,   33,  752,   33,  195,   33,   33,  752,   33,
+       33,  752,  752,   33,  752,  752,  752,  752,  752,  734,
+       77,  759,   33,   33,  752,   33,   33,   33,   33,   33,
+       33,   33,   33,   33,   33,   33,  752,  752,  752,  752,
+       33,   33,   33,   33,   33,   33,  752,  195,  752,   33,
+      752,  195,  752,   33,   33,  752,  752,   33,  752,  752,
+      752,  752,  734,  760,   77,  734,   33,   33,  752,   33,
+       33,   33,   33,   33,  195,   33,   33,  752,  752,  752,
+      752,   33,   33,   33,  752,  195,  752,  752,  195,  752,
 
-       33,   33,   33,   33,   33,   33,  744,   33,   33,   33,
-      744,   33,   33,   33,   33,  744,   33,   33,   33,   33,
-       33,   33,   33,   33,   33,  744,   33,   33,   33,   33,
-       33,  744,  744,  744,   33,  725,  725,  725,  725,  725,
-       77,  725,   33,   33,   33,   33,  744,   33,   33,   33,
-       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-       33,   33,   33,   33,   33,  744,  744,  744,   33,   33,
-       33,   33,   33,   33,   33,   33,   33,   33,  744,   33,
-       33,   33,  744,   33,  187,   33,   33,  744,   33,   33,
-       33,   33,  744,  744,   33,   33,   33,  744,   33,  744,
+      195,  752,  752,   33,  752,  752,  752,  752,  734,  734,
+      746,  734,   33,   33,   33,   33,   33,  195,   33,   33,
+      752,  752,  752,   33,   33,   33,  752,  195,  752,  752,
+      195,  752,  195,  752,  752,  752,  752,  752,  746,  734,
+       33,   33,   33,  195,   33,  752,  752,  752,   33,   33,
+      752,  195,  752,  752,  195,  752,  195,  752,  752,  752,
+      752,  746,  734,  195,   33,  752,  752,  752,   33,   33,
+      752,  195,  752,  752,  195,  752,  195,  752,  752,  752,
+      752,  746,  734,  195,   33,  752,  752,  752,  195,  752,
+      752,  195,  752,  752,  752,  752,  752,  746,  734,  195,
 
-      744,  744,  725,  725,  725,   77,  725,   33,   33,   33,
-      744,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-       33,   33,   33,   33,   33,   33,   33,   33,   33,  744,
-      744,  744,   33,   33,   33,   33,   33,   33,   33,   33,
-       33,   33,  187,  744,   33,   33,  744,   33,  187,   33,
-       33,  744,   33,   33,   33,   33,  744,  744,   33,   33,
-      744,  744,  744,  744,  744,  725,  725,   77,  725,   33,
-       33,  744,   33,   33,   33,   33,   33,   33,   33,   33,
-       33,   33,   33,   33,   33,   33,   33,   33,  744,  744,
-      744,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-
-       33,  187,  744,   33,  744,   33,  187,   33,   33,  744,
-       33,   33,  744,  744,   33,  744,  744,  744,  744,  744,
-      725,   77,  750,   33,   33,  744,   33,   33,   33,   33,
-       33,   33,   33,   33,   33,   33,   33,  744,  744,  744,
-      744,   33,   33,   33,   33,   33,   33,  744,  187,  744,
-       33,  744,  187,  744,   33,   33,  744,  744,   33,  744,
-      744,  744,  744,  725,  751,   77,  725,   33,   33,  744,
-       33,   33,   33,   33,   33,  187,   33,   33,  744,  744,
-      744,  744,   33,   33,   33,  744,  187,  744,  744,  187,
-      744,  187,  744,  744,   33,  744,  744,  744,  744,  725,
-
-      725,  738,  725,   33,   33,   33,   33,   33,  187,   33,
-       33,  744,  744,  744,   33,   33,   33,  744,  187,  744,
-      744,  187,  744,  187,  744,  744,  744,  744,  744,  738,
-      725,   33,   33,   33,  187,   33,  744,  744,  744,   33,
-       33,  744,  187,  744,  744,  187,  744,  187,  744,  744,
-      744,  744,  738,  725,  187,   33,  744,  744,  744,   33,
-       33,  744,  187,  744,  744,  187,  744,  187,  744,  744,
-      744,  744,  738,  725,  187,   33,  744,  744,  744,  187,
-      744,  744,  187,  744,  744,  744,  744,  744,  738,  725,
-      187,  744,  187,  744,  744,  744,  744,  738,  725,  187,
-
-      744,  744,  744,  744,  738,  725,  187,  744,  738,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,    0,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725
+      752,  195,  752,  752,  752,  752,  746,  734,  195,  752,
+      752,  752,  752,  746,  734,  195,  752,  746,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,    0,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734
     } ;
 
-static yyconst short int yy_nxt[4432] =
+static yyconst short int yy_nxt[4496] =
     {   0,
        18,   19,   20,   19,   19,   21,   22,   23,   24,   25,
        18,   25,   26,   27,   28,   29,   30,   30,   30,   30,
        30,   30,   30,   31,   21,   32,   32,   18,   33,   34,
        35,   36,   37,   38,   39,   40,   41,   40,   40,   40,
        42,   43,   44,   45,   40,   46,   47,   48,   49,   50,
-       51,   40,   40,   40,   21,   21,   52,   52,   52,   52,
+       51,   40,   40,   40,   25,   21,   21,   52,   52,   52,
        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   52,   52,   52,   53,   21,
-       25,   55,   56,   56,   55,   56,   56,   55,   56,   56,
-       68,   57,   65,   60,   57,   60,   66,   58,   55,   56,
+       52,   52,   52,   52,   52,   52,   52,   52,   52,   53,
+       21,   25,   55,   56,   56,   55,   56,   56,   55,   56,
+       56,   68,   57,   65,   60,   57,   60,   66,   58,   55,
 
-       56,   61,   65,   61,   68,   62,   66,   62,   58,  194,
-       83,   69,   96,  182,   70,   87,   63,  194,   63,  100,
-      270,   79,   80,   79,   79,   69,  183,   81,   70,  100,
-      724,  100,  602,  100,   79,   80,   79,   79,  100,  265,
-       81,   84,   84,   84,   84,  266,   89,  271,   83,   84,
-       84,   84,   84,  215,  170,  341,   83,   91,   91,   91,
-       91,  170,  723,  383,   83,   83,   71,  194,   72,   93,
-      194,   91,   91,   94,   94,   94,   94,   94,   94,   94,
-       71,  194,   72,   73,   74,   75,   74,   74,   73,   73,
-       73,   73,   73,   73,   73,   73,   73,   73,   32,  194,
+       56,   56,   61,   65,   61,   68,   62,   66,   62,   58,
+       93,   89,   69,  102,  202,   70,  202,   63,  734,   63,
+       90,   90,   90,   90,  202,  202,   69,   89,  202,   70,
+       90,   90,   90,   90,  734,  190,  733,   89,   97,   97,
+       97,   97,   95,  274,  575,   89,   89,  732,  191,  275,
+       99,  176,   97,   97,  100,  100,  100,  100,  100,  100,
+      100,  178,  178,  178,  178,  202,  734,  244,   71,  202,
+       72,  103,  103,  103,  103,  103,  103,  103,  103,  238,
+      341,  222,   71,  255,   72,   73,   74,   75,   74,   74,
+       73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
 
-       82,  173,  173,  173,  173,  194,   73,   73,   73,   73,
-       73,   32,  194,   82,  100,   77,   97,   97,   97,   97,
-       97,   97,   97,   97,  100,  226,  100,  194,  100,  100,
-      332,  194,  107,  130,  230,  100,  108,   73,   73,  100,
-      109,  100,  110,  100,  194,  100,  116,  117,  100,  100,
-      402,  194,  111,  194,  100,  214,  194,  118,  194,  131,
-      295,   74,   73,   74,   73,   74,   75,   74,   74,   73,
-       73,   73,   73,   73,   73,   73,   73,   73,   73,  173,
-      173,  173,  173,  236,  725,  296,  194,   73,   73,   73,
-       73,   73,  100,  194,  270,  367,   77,  721,  112,  268,
+      178,  178,  178,  178,   90,   90,   90,   90,   73,   73,
+       73,   73,   73,  106,  223,  279,  113,   77,  279,  106,
+      114,  234,  121,  106,  115,  106,  116,  106,  202,  106,
+      202,  106,  106,  106,  106,  202,  117,  106,  106,   73,
+       73,   73,  280,  118,  106,  280,  106,  119,  106,  106,
+      120,  106,  202,  106,  202,  202,  106,  178,  178,  178,
+      178,  176,  350,  202,   74,   73,   74,   73,   74,   75,
+       74,   74,   73,   73,   73,   73,   73,   73,   73,   73,
+       73,   73,  202,  259,  268,  269,  106,  305,  343,  202,
+       73,   73,   73,   73,   73,  176,  106,  122,  123,   77,
 
-      725,  268,  113,  251,  100,  114,  100,  247,  194,  269,
-      100,  100,  316,  115,  194,  119,  100,  366,   73,   73,
-      100,  271,  100,  722,  100,  725,  100,  505,  100,  100,
-      100,  725,  120,  252,  194,  100,  123,  100,  720,  124,
-      406,  307,   74,   73,   74,   83,  253,  100,  125,  126,
-      170,  100,  260,  261,  127,  624,  100,   84,   84,   84,
-       84,   87,  311,  170,  194,   88,   88,   88,   88,   88,
-       88,   88,   88,   88,   88,   88,   88,   88,   88,   88,
-       88,   88,   88,   88,   88,   88,   88,   88,   88,   88,
-       88,  401,   89,   90,   90,   90,   90,   90,   90,   90,
+      106,  277,  260,  277,  304,  106,  138,  139,  124,  325,
+      140,  278,  316,  125,  106,  261,  106,  277,  106,  277,
+      141,   73,   73,   73,  106,  106,  106,  278,  106,  729,
+      126,  320,  728,  106,  415,  142,  192,  192,  192,  192,
+      192,  192,  192,  192,  176,  470,   74,   73,   74,   32,
+       78,   79,   78,   78,   32,   32,   80,   32,   32,   32,
+       81,   82,   32,   83,   32,   32,   32,   32,   32,   32,
+       32,   32,   32,   32,   32,   32,   32,   84,   84,   84,
+       84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
+       84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
 
-       90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
-       90,   90,   90,   90,   90,   99,  334,  719,  100,  100,
-      100,  100,  100,  100,  100,  100,  173,  173,  173,  173,
-      194,  100,  101,  100,  100,  100,  100,  100,  100,  100,
-      100,  100,  102,  100,  103,  100,  104,  100,  100,  100,
-      100,  105,  100,  100,  100,  100,  100,  194,  194,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  100,  194,  194,  194,  718,  128,  100,  268,  379,
-      268,  100,  725,  100,  129,  100,  194,  100,  269,  100,
+       84,   84,   84,   85,   86,   32,   32,   32,   32,   32,
+       32,   32,   32,   32,   32,   32,   32,   32,   32,   32,
+       32,   32,   32,   32,   32,   32,   32,   32,   87,   32,
+       88,   89,  202,  477,   97,   97,   97,   97,  176,  727,
+      726,  188,  202,  202,  202,  725,  724,   93,   97,   97,
+      723,   94,   94,   94,   94,   94,   94,   94,   94,   94,
+       94,   94,   94,   94,   94,   94,   94,   94,   94,   94,
+       94,   94,   94,   94,   94,   94,   94,  667,  411,   95,
+       96,   96,   96,   96,   96,   96,   96,   96,   96,   96,
+       96,   96,   96,   96,   96,   96,   96,   96,   96,   96,
 
-      100,  100,  717,  132,  133,  326,  100,  134,  194,  194,
-      194,  194,  121,  100,  194,  100,  449,  135,  716,  388,
-      194,  715,  100,  122,  137,  100,  100,  138,  194,  142,
-      333,  136,  400,  194,  194,  139,  100,  100,  100,  100,
-      100,  140,  411,  100,  100,  100,  143,  194,  431,  194,
-      144,  147,  194,  100,  430,  100,  194,  100,  452,  148,
-      100,  145,  100,  100,  194,  465,  146,  141,  432,  394,
-      100,  194,  100,  100,  100,  151,  149,  100,  100,  100,
-      444,  152,  100,  194,  514,  194,  100,  194,  100,  461,
-      100,  150,  100,  155,  447,  458,  100,  100,  100,  468,
+       96,   96,  105,  375,  388,  106,  106,  106,  106,  106,
+      106,  106,  106,  722,  202,  202,  202,  721,  106,  107,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  108,
+      106,  109,  106,  110,  106,  106,  106,  106,  111,  106,
+      106,  106,  106,  106,  202,  202,  202,  112,  112,  112,
+      112,  112,  112,  112,  112,  112,  112,  112,  112,  112,
+      112,  112,  112,  112,  112,  112,  112,  112,  112,  106,
+      202,  202,  202,  410,  129,  106,  397,  130,  403,  106,
+      202,  106,  202,  106,  202,  106,  131,  132,  106,  106,
+      106,  439,  133,  335,  106,  134,  106,  376,  734,  202,
 
-      100,  194,  153,  194,  170,  100,  158,  158,  158,  158,
-      464,  457,  714,  154,  713,  463,  472,  490,  712,  540,
-      159,  159,  159,  159,  159,  159,  160,  160,  169,  503,
-      194,  561,  725,  169,  169,  169,  169,  169,  169,  169,
-      169,  169,  169,   91,   91,   91,   91,  194,  510,  516,
-      180,  169,  169,  169,  169,  169,  502,   91,   91,  184,
-      184,  184,  184,  184,  184,  184,  184,   97,   97,   97,
-       97,   97,   97,   97,   97,  100,  100,  194,  403,  403,
-      403,  403,  169,  169,  489,  100,  100,  100,  100,  100,
-      100,  100,  100,  189,  100,  100,  194,  194,  721,  491,
+      106,  127,  106,  135,  106,  202,  106,  202,  106,  136,
+      106,  202,  128,  143,  106,  106,  144,  720,  392,  342,
+      202,  409,  458,  202,  145,  202,  106,  202,  106,  106,
+      146,  202,  148,  106,  202,  106,  137,  440,  149,  106,
+      420,  106,  150,  106,  456,  106,  202,  106,  106,  106,
+      202,  153,  106,  151,  106,  734,  461,  147,  152,  154,
+      106,  473,  106,  106,  106,  441,  106,  466,  202,  467,
+      106,  106,  106,  106,  106,  157,  155,  106,  453,  106,
+      535,  158,  106,  106,  202,  633,  474,  472,  160,  498,
+      161,  570,  156,  106,  202,  106,  519,  106,  164,  164,
 
-      194,  190,  100,  100,  100,  100,  192,  169,  169,  194,
-      100,  100,  194,  169,  169,  169,  169,  169,  169,  169,
-      169,  169,  169,  194,  722,  194,  100,  100,  194,  513,
-      538,  169,  169,  169,  169,  169,  100,  100,  100,  100,
-      100,  100,  100,  550,  193,  100,  100,  195,  539,  171,
-      191,  194,  100,  526,  100,  100,  100,  405,  100,  517,
-      519,  100,  169,  169,  711,  100,  100,  100,  100,  100,
-      100,  194,  197,  196,  100,  194,  100,  100,  100,  198,
-      100,  541,  554,  518,  194,  100,  194,  169,  188,  188,
-      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
+      164,  164,  106,  159,  103,  103,  103,  103,  103,  103,
+      103,  103,  165,  165,  165,  165,  165,  165,  166,  166,
+      175,  481,  202,  202,  202,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  734,  202,  500,  106,  106,
+      202,  499,  514,  175,  175,  175,  175,  175,  106,  106,
+      106,  106,  106,  106,  106,  719,  197,  106,  106,  511,
+      412,  412,  412,  412,  198,  202,  106,  106,  106,  512,
+      106,  202,  202,  106,  175,  175,  175,  106,  202,  106,
+      106,  106,  106,  202,  200,  106,  106,  202,  202,  106,
+      199,  202,  718,  522,  202,  106,  526,  106,  202,  106,
 
-      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
-      100,  194,  199,  100,  566,  562,  194,  194,  558,  520,
-      100,  170,  100,  100,  100,  100,  200,  100,  100,  100,
-      201,  100,  100,  194,  552,  194,  579,  194,  100,  202,
-      203,  100,  100,  100,  100,  100,  194,  100,  204,  194,
-      100,  563,  205,  194,  100,  194,  100,  194,  100,  710,
-      194,  570,  100,  100,  100,  194,  100,  100,  206,  207,
-      100,  100,  557,  100,  209,  194,  194,  100,  194,  100,
-      212,  100,  100,  100,  100,  100,  208,  210,  100,  100,
-      194,  211,  100,  216,  581,  589,  586,  194,  100,  582,
+      175,  175,  202,  201,  106,  549,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  192,  192,  192,  192,
+      192,  192,  192,  192,  175,  175,  175,  175,  175,  106,
+      523,  202,  525,  527,  203,  106,  528,  529,  595,  106,
+      414,  106,  177,  106,  202,  106,  563,  106,  106,  106,
+      106,  550,  202,  204,  106,  175,  175,  175,  106,  566,
+      106,  202,  106,  571,  205,  559,  202,  202,  106,  106,
+      106,  206,  106,  202,  202,  202,  202,  106,  567,  202,
+      202,  175,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
 
-      100,  213,  100,  100,  638,  560,  100,  100,  194,  217,
-      194,  580,  194,  100,  100,  100,  100,  100,  100,  597,
-      100,  588,  100,  591,  100,  100,  100,  194,  218,  100,
-      219,  598,  194,  100,  596,  194,  194,  594,  725,  100,
-      100,  100,  194,  100,  194,  194,  220,  221,  100,  612,
-      100,  100,  100,  222,  100,  194,  609,  100,  593,  100,
-      613,  100,  618,  100,  194,  100,  623,  100,  100,  224,
-      100,  100,  194,  223,  194,  194,  100,  194,  225,  709,
-      100,  100,  100,  194,  100,  626,  194,  100,  599,  227,
-      621,  100,  642,  100,  100,  100,  100,  100,  100,  194,
+      196,  196,  196,  196,  106,  569,  207,  106,  547,  572,
+      561,  202,  202,  202,  106,  202,  106,  106,  106,  106,
+      208,  106,  106,  106,  209,  106,  106,  548,  588,  590,
+      579,  591,  106,  210,  211,  106,  106,  106,  106,  106,
+      202,  106,  212,  202,  106,  716,  213,  202,  106,  202,
+      106,  202,  106,  202,  202,  611,  106,  106,  106,  202,
+      106,  106,  214,  215,  106,  106,  602,  106,  217,  605,
+      202,  106,  598,  106,  220,  106,  106,  106,  106,  106,
+      216,  218,  106,  106,  176,  219,  106,  224,  607,  202,
+      202,  202,  106,  632,  106,  221,  106,  106,  600,  734,
 
-      100,  614,  228,  100,  620,  100,  627,  100,  100,  100,
-      194,  100,  194,  194,  625,  100,  100,  100,  100,  100,
-      100,  100,  100,  229,  100,  628,  231,  100,  194,  637,
-      657,  100,  100,  100,  629,  100,  600,  600,  600,  600,
-      100,  232,  100,  194,  100,  100,  100,  647,  234,  194,
-      194,  233,  235,  194,  194,  100,  194,  100,  645,  100,
-      237,  100,  639,  194,  100,  644,  707,  100,  659,  194,
-      706,  238,  194,  100,  194,  100,  194,  100,  100,  100,
-      100,  100,  239,  705,  100,  240,  100,  194,  100,  650,
-      100,  194,  100,  244,  100,  100,  100,  100,  100,  664,
+      106,  106,  606,  225,  636,  597,  589,  106,  106,  106,
+      106,  106,  106,  603,  106,  608,  106,  618,  106,  106,
+      106,  202,  226,  106,  227,  202,  202,  106,  609,  609,
+      609,  609,  202,  106,  106,  106,  202,  106,  202,  622,
+      228,  229,  106,  730,  106,  106,  106,  230,  106,  621,
+      691,  106,  715,  106,  202,  106,  714,  106,  202,  106,
+      202,  106,  106,  232,  106,  106,  202,  231,  630,  731,
+      106,  202,  233,  202,  106,  106,  106,  202,  106,  202,
+      647,  106,  651,  235,  202,  106,  623,  106,  106,  106,
+      106,  106,  106,  666,  106,  202,  236,  106,  629,  106,
 
-      242,  649,  241,  100,  658,  100,  100,  243,  652,  100,
-      194,  194,  100,  651,  100,  601,  100,  245,  100,  669,
-      100,  194,  100,  100,  100,  100,  100,  692,  665,  100,
-      194,  100,  682,  100,  700,  100,  248,  100,  194,  100,
-      194,  100,  246,  100,  100,  100,  249,  699,  100,  250,
-      667,  194,  194,  194,  100,  100,  100,  100,  100,  100,
-      662,  677,  254,  100,  100,  158,  158,  158,  158,  184,
-      184,  184,  184,  184,  184,  184,  184,  672,  194,  159,
-      159,  159,  159,  159,  159,  160,  160,  256,  701,  670,
-      671,  160,  160,  160,  160,  160,  160,  160,  160,  257,
+      202,  106,  106,  106,  202,  106,  202,  627,  610,  106,
+      106,  106,  106,  106,  106,  106,  106,  237,  106,  646,
+      239,  106,  637,  202,  635,  106,  106,  106,  202,  106,
+      709,  634,  648,  202,  106,  240,  106,  638,  106,  106,
+      106,  202,  242,  708,  654,  241,  243,  202,  653,  106,
+      707,  106,  202,  106,  245,  106,  202,  658,  106,  730,
+      202,  106,  656,  202,  202,  246,  202,  106,  659,  106,
+      202,  106,  106,  106,  106,  106,  247,  202,  106,  248,
+      106,  661,  106,  660,  106,  731,  106,  252,  106,  106,
+      106,  106,  106,  676,  250,  202,  249,  106,  668,  106,
 
-      194,  679,  681,  160,  160,  160,  160,  160,  160,  160,
-      160,   99,  100,  100,  694,  272,  698,  194,  194,  194,
-      194,  194,  100,  100,  100,  100,  100,  100,  100,  100,
-      678,  100,  100,  600,  600,  600,  600,  194,  100,  273,
-      100,  100,  100,  100,  194,  693,  194,  100,  100,  194,
-      194,  194,  684,  194,  691,  188,  188,  188,  188,  188,
-      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
-      188,  188,  188,  188,  188,  188,  188,  100,  702,  708,
-      194,  690,  689,  683,  194,  100,  680,  100,  100,  100,
-      274,  100,  275,  687,  685,  100,  100,  100,  100,  100,
+      106,  251,  202,  106,  673,  674,  106,  671,  106,  202,
+      106,  253,  106,  680,  106,  202,  106,  106,  106,  106,
+      106,  678,  202,  106,  202,  106,  679,  106,  711,  106,
+      256,  106,  202,  106,  681,  106,  254,  106,  106,  106,
+      257,  202,  106,  258,  609,  609,  609,  609,  106,  106,
+      106,  106,  106,  106,  202,  687,  262,  106,  106,  164,
+      164,  164,  164,  202,  202,  701,  686,  702,  202,  202,
+      202,  202,  202,  165,  165,  165,  165,  165,  165,  166,
+      166,  264,  202,  688,  703,  166,  166,  166,  166,  166,
+      166,  166,  166,  265,  693,  202,  202,  166,  166,  166,
 
-      100,  100,  100,  686,  100,  695,  696,  100,  194,  100,
-      675,  100,  601,  100,  194,  100,  674,  100,  276,  277,
-      100,  100,  194,  100,  673,  100,  668,  100,  100,  100,
-      688,  100,  279,  278,  697,  100,  100,  100,  100,  100,
-      666,  663,  655,  654,  100,  653,  100,  194,  100,  100,
-      100,  648,  100,  646,  643,  280,  100,  100,  100,  100,
-      281,  100,  635,  100,  703,  100,  282,  283,  100,  284,
-      100,  100,  704,  631,  286,  630,  194,  285,  622,  619,
-      100,  100,  100,  100,  100,  100,  100,  194,  194,  100,
-      100,  603,  100,  590,  587,  194,  100,  553,  100,  287,
+      166,  166,  166,  166,  166,  105,  106,  106,  700,  281,
+      699,  696,  698,  692,  690,  694,  106,  106,  106,  106,
+      106,  106,  106,  106,  610,  106,  106,  704,  705,  717,
+      202,  710,  106,  282,  106,  106,  106,  106,  202,  689,
+      202,  106,  106,  684,  683,  682,  677,  697,  695,  202,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  106,  675,  672,  664,  663,  662,  202,  657,
+      106,  706,  106,  106,  106,  283,  106,  284,  655,  712,
+      106,  106,  106,  106,  106,  106,  106,  106,  652,  106,
 
-      100,  549,  100,  100,  100,  100,  100,  523,  522,  100,
-      507,  100,  289,  100,  288,  100,  469,  100,  407,  100,
-      100,  100,  100,  100,  340,  342,  100,  178,  100,  292,
-      290,  176,  100,  291,  100,  174,  100,  100,  100,  100,
-      100,  170,  340,  156,  725,  100,  194,  100,  100,  100,
-      266,  100,  178,  176,  293,  262,  100,  170,  100,  294,
-      100,  100,  100,  259,  258,  156,  194,  100,  186,  100,
-      185,  100,  100,  100,  181,  100,  178,  176,  297,  100,
-      100,  298,  299,  100,  100,  300,  100,  100,  100,  175,
-      100,  100,  174,  100,  174,  168,  303,  301,  166,  100,
+      713,  644,  106,  640,  106,  639,  106,  202,  106,  631,
+      106,  628,  106,  285,  286,  106,  106,  202,  106,  202,
+      106,  612,  106,  106,  106,  599,  106,  288,  287,  596,
+      106,  106,  106,  106,  106,  202,  562,  558,  532,  106,
+      531,  106,  516,  106,  106,  106,  478,  106,  416,  349,
+      289,  106,  106,  106,  106,  290,  106,  351,  106,  186,
+      106,  291,  292,  106,  293,  106,  106,  184,  182,  295,
+      180,  176,  294,  349,  162,  106,  106,  106,  106,  106,
+      106,  106,  734,  202,  106,  106,  275,  106,  186,  184,
+      271,  106,  180,  106,  296,  106,  176,  106,  106,  106,
 
-      100,  100,  100,  100,  100,  100,  100,  100,  302,  100,
-      304,  100,  100,   96,  164,  163,  162,  156,   98,  100,
-       95,  100,  100,  100,   86,  100,   83,   83,  725,  100,
-      100,  100,  100,  100,  100,  100,  100,  725,  100,  725,
-      725,  305,  725,  100,  725,  306,  308,  100,  725,  100,
-      725,  725,  725,  100,  100,  100,  100,  100,  725,  309,
-      725,  725,  100,  725,  100,  725,  100,  100,  100,  725,
-      100,  310,  725,  725,  100,  100,  100,  100,  100,  100,
-      100,  100,  725,  100,  725,  312,  100,  725,  100,  725,
-      100,  725,  100,  725,  100,  725,  100,  725,  100,  100,
+      106,  106,  267,  266,  106,  162,  106,  298,  106,  297,
+      106,  202,  106,  194,  106,  106,  106,  106,  106,  193,
+      189,  106,  186,  106,  301,  299,  184,  106,  300,  106,
+      183,  106,  106,  106,  106,  106,  182,  182,  180,  102,
+      106,  179,  106,  106,  106,  174,  106,  172,  102,  302,
+      170,  106,  169,  106,  303,  106,  106,  106,  168,  162,
+      104,  101,  106,   92,  106,   89,  106,  106,  106,   89,
+      106,  734,  734,  306,  106,  106,  307,  308,  106,  106,
+      309,  106,  106,  106,  734,  106,  106,  734,  106,  734,
+      734,  312,  310,  734,  106,  106,  106,  106,  106,  106,
 
-      100,  725,  100,  725,  100,  313,  100,  100,  100,  725,
-      100,  725,  725,  314,  100,  100,  100,  100,  100,  318,
-      100,  725,  725,  100,  315,  725,  725,  317,  100,  100,
-      100,  100,  100,  725,  100,  725,  100,  725,  100,  100,
-      100,  100,  100,  725,  725,  725,  725,  319,  725,  100,
-      725,  100,  320,  100,  725,  100,  725,  100,  725,  100,
-      100,  100,  725,  100,  321,  100,  725,  100,  100,  100,
-      725,  100,  725,  725,  725,  100,  100,  100,  100,  100,
-      725,  725,  725,  322,  100,  725,  100,  725,  100,  725,
-      100,  725,  100,  725,  725,  323,  100,  100,  100,  100,
+      106,  106,  106,  311,  106,  313,  106,  106,  734,  734,
+      734,  734,  734,  734,  106,  734,  106,  106,  106,  734,
+      106,  734,  734,  734,  106,  106,  106,  106,  106,  106,
+      106,  106,  734,  106,  734,  734,  314,  734,  106,  734,
+      315,  317,  106,  734,  106,  734,  734,  734,  106,  106,
+      106,  106,  106,  734,  318,  734,  734,  106,  734,  106,
+      734,  106,  106,  106,  734,  106,  319,  734,  734,  106,
+      106,  106,  106,  106,  106,  106,  106,  734,  106,  734,
+      321,  106,  734,  106,  734,  106,  734,  106,  734,  106,
+      734,  106,  734,  106,  106,  106,  734,  106,  734,  106,
 
-      100,  725,  325,  324,  725,  100,  725,  100,  725,  100,
-      725,  100,  725,  100,  725,  725,  331,  100,  100,  100,
-      327,  100,  328,  100,  100,  725,  100,  329,  725,  725,
-      725,  725,  725,  100,  100,  100,  100,  100,  100,  100,
-      725,  330,  100,  100,  725,  335,  725,  725,  725,  100,
-      725,  100,  725,  100,  336,  336,  336,  336,  100,  725,
-      725,  725,  338,  338,  338,  338,  725,  725,  337,  337,
-      337,  337,  337,  337,  337,  337,  339,  339,  339,  339,
-      339,  339,  339,  339,  100,  100,  725,  725,  725,  725,
-      725,  725,  344,  725,  100,  100,  343,  100,  100,  100,
+      322,  106,  106,  106,  734,  106,  734,  734,  323,  106,
+      106,  106,  106,  106,  327,  106,  734,  734,  106,  324,
+      734,  734,  326,  106,  106,  106,  106,  106,  734,  106,
+      734,  106,  734,  106,  106,  106,  106,  106,  734,  734,
+      734,  734,  328,  734,  106,  734,  106,  329,  106,  734,
+      106,  734,  106,  734,  106,  106,  106,  734,  106,  330,
+      106,  734,  106,  106,  106,  734,  106,  734,  734,  734,
+      106,  106,  106,  106,  106,  734,  734,  734,  331,  106,
+      734,  106,  734,  106,  734,  106,  734,  106,  734,  734,
+      332,  106,  106,  106,  106,  106,  734,  334,  333,  734,
 
-      100,  725,  725,  100,  100,  725,  100,  725,  725,  725,
-      100,  345,  100,  725,  100,  725,  100,  100,  346,  100,
-      100,  725,  725,  100,  725,  100,  348,  100,  725,  100,
-      725,  100,  725,  100,  725,  100,  100,  100,  349,  100,
-      100,  350,  100,  725,  725,  725,  725,  725,  725,  100,
-      100,  100,  100,  100,  100,  100,  725,  725,  100,  100,
-      725,  347,  725,  100,  725,  100,  725,  100,  725,  100,
-      725,  100,  351,  100,  100,  100,  352,  100,  725,  725,
-      725,  100,  100,  100,  100,  100,  354,  100,  725,  353,
-      100,  725,  725,  725,  100,  100,  100,  100,  100,  100,
+      106,  734,  106,  734,  106,  734,  106,  734,  106,  734,
+      734,  340,  106,  106,  106,  336,  106,  337,  106,  106,
+      734,  106,  338,  734,  734,  734,  734,  734,  106,  106,
+      106,  106,  106,  106,  106,  734,  339,  106,  106,  734,
+      344,  734,  734,  734,  106,  734,  106,  734,  106,  345,
+      345,  345,  345,  106,  734,  734,  734,  347,  347,  347,
+      347,  734,  734,  346,  346,  346,  346,  346,  346,  346,
+      346,  348,  348,  348,  348,  348,  348,  348,  348,  106,
+      106,  734,  734,  734,  734,  734,  734,  353,  734,  106,
+      106,  352,  106,  106,  106,  106,  734,  734,  106,  106,
 
-      725,  100,  725,  355,  725,  100,  100,  356,  100,  100,
-      357,  100,  725,  358,  100,  725,  725,  725,  100,  725,
-      100,  100,  100,  100,  725,  100,  100,  100,  725,  359,
-      100,  725,  100,  725,  725,  725,  100,  725,  100,  725,
-      100,  725,  100,  100,  100,  100,  360,  725,  725,  100,
-      361,  100,  725,  100,  725,  100,  725,  100,  725,  100,
-      100,  100,  100,  100,  725,  362,  725,  725,  100,  725,
-      100,  725,  363,  725,  100,  100,  364,  725,  365,  100,
-      725,  100,  725,  725,  725,  100,  725,  100,  725,  100,
-      725,  100,  100,  100,  100,  100,  725,  725,  100,  725,
+      734,  106,  734,  734,  734,  106,  354,  106,  734,  106,
+      734,  106,  106,  355,  106,  106,  734,  734,  106,  734,
+      106,  357,  106,  734,  106,  734,  106,  734,  106,  734,
+      106,  106,  106,  358,  106,  106,  359,  106,  734,  734,
+      734,  734,  734,  734,  106,  106,  106,  106,  106,  106,
+      106,  734,  734,  106,  106,  734,  734,  356,  106,  734,
+      106,  734,  106,  734,  106,  734,  106,  360,  106,  106,
+      106,  361,  106,  734,  734,  734,  106,  106,  106,  106,
+      106,  363,  106,  734,  362,  106,  734,  734,  734,  106,
+      106,  106,  106,  106,  106,  734,  106,  734,  364,  734,
 
-      100,  725,  100,  725,  100,  725,  100,  725,  100,  725,
-      100,  100,  100,  100,  100,  725,  369,  100,  725,  725,
-      370,  725,  725,  100,  100,  100,  100,  100,  100,  100,
-      371,  725,  100,  100,  373,  100,  368,  725,  725,  100,
-      725,  100,  377,  100,  725,  100,  725,  100,  372,  100,
-      100,  374,  725,  100,  100,  375,  725,  725,  725,  725,
-      100,  100,  100,  100,  100,  100,  376,  100,  725,  100,
-      725,  100,  100,  100,  100,  100,  725,  725,  378,  725,
-      100,  725,  100,  380,  100,  100,  100,  725,  100,  725,
-      725,  725,  100,  100,  100,  100,  100,  100,  100,  100,
+      106,  106,  365,  106,  106,  366,  106,  734,  367,  106,
+      734,  734,  734,  106,  734,  106,  106,  106,  106,  734,
+      106,  106,  106,  734,  368,  106,  734,  106,  734,  734,
+      734,  106,  734,  106,  734,  106,  734,  106,  106,  106,
+      106,  369,  734,  734,  106,  370,  106,  734,  106,  734,
+      106,  734,  106,  734,  106,  106,  106,  106,  106,  734,
+      371,  734,  734,  106,  734,  106,  734,  372,  734,  106,
+      106,  373,  734,  374,  106,  734,  106,  734,  734,  734,
+      106,  734,  106,  734,  106,  734,  106,  106,  106,  106,
+      106,  734,  734,  106,  734,  106,  734,  106,  734,  106,
 
-      725,  100,  385,  381,  100,  725,  100,  725,  100,  384,
-      100,  382,  100,  725,  725,  725,  100,  100,  100,  100,
-      100,  725,  725,  725,  725,  100,  725,  100,  725,  100,
-      386,  100,  725,  100,  387,  100,  725,  100,  100,  100,
-      725,  100,  725,  100,  725,  100,  100,  100,  725,  100,
-      725,  100,  725,  100,  100,  100,  725,  100,  725,  725,
-      725,  100,  100,  100,  100,  100,  725,  390,  725,  389,
-      100,  725,  100,  725,  100,  100,  100,  725,  100,  725,
-      725,  725,  100,  100,  100,  100,  100,  391,  725,  100,
-      100,  100,  392,  100,  100,  725,  100,  725,  725,  725,
+      734,  106,  734,  106,  734,  106,  106,  106,  106,  106,
+      734,  378,  106,  734,  734,  379,  734,  734,  106,  106,
+      106,  106,  106,  106,  106,  380,  734,  106,  106,  382,
+      106,  734,  377,  734,  106,  734,  106,  386,  106,  734,
+      106,  734,  106,  381,  106,  106,  383,  734,  106,  106,
+      384,  734,  734,  734,  734,  106,  106,  106,  106,  106,
+      106,  385,  106,  734,  106,  734,  106,  106,  106,  106,
+      106,  734,  734,  387,  734,  106,  734,  106,  389,  106,
+      106,  106,  734,  106,  734,  734,  734,  106,  106,  106,
+      106,  106,  106,  106,  106,  734,  106,  394,  390,  106,
 
-      100,  725,  100,  100,  100,  100,  100,  100,  100,  100,
-      100,  100,  100,  725,  100,  100,  725,  100,  725,  725,
-      725,  100,  725,  100,  100,  100,  395,  100,  100,  100,
-      100,  100,  100,  100,  393,  397,  396,  725,  100,  725,
-      725,  725,  100,  725,  100,  725,  100,  725,  100,  100,
-      100,  100,  100,  725,  725,  100,  725,  100,  725,  100,
-      725,  100,  725,  100,  725,  100,  399,  100,  100,  100,
-      725,  725,  725,  398,  100,  336,  336,  336,  336,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  337,
-      337,  337,  337,  337,  337,  337,  337,  403,  403,  403,
+      734,  106,  734,  106,  393,  106,  391,  106,  734,  734,
+      734,  106,  106,  106,  106,  106,  734,  734,  734,  734,
+      106,  734,  106,  734,  106,  395,  106,  734,  106,  396,
+      106,  734,  106,  106,  106,  734,  106,  734,  106,  734,
+      106,  106,  106,  734,  106,  734,  106,  734,  106,  106,
+      106,  734,  106,  734,  734,  734,  106,  106,  106,  106,
+      106,  734,  399,  734,  398,  106,  734,  106,  734,  106,
+      106,  106,  734,  106,  734,  734,  734,  106,  106,  106,
+      106,  106,  400,  734,  106,  106,  106,  401,  106,  106,
+      734,  106,  734,  734,  734,  106,  734,  106,  106,  106,
 
-      403,  725,  725,  725,  725,  725,  725,  404,  725,  725,
-      725,  337,  337,  337,  337,  337,  337,  337,  337,  338,
-      338,  338,  338,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  339,  339,  339,  339,  339,  339,  339,
-      339,  404,  725,  100,  725,  339,  339,  339,  339,  339,
-      339,  339,  339,  100,  725,  100,  725,  100,  100,  409,
-      725,  408,  100,  725,  725,  725,  725,  725,  100,  725,
-      100,  100,  100,  410,  100,  725,  405,  100,  725,  725,
-      725,  100,  725,  100,  100,  100,  100,  725,  100,  725,
-      100,  412,  100,  100,  725,  100,  413,  725,  100,  725,
+      106,  106,  106,  106,  106,  106,  106,  106,  734,  106,
+      106,  734,  106,  734,  734,  734,  106,  734,  106,  106,
+      106,  404,  106,  106,  106,  106,  106,  734,  106,  106,
+      402,  405,  406,  734,  734,  106,  734,  734,  734,  106,
+      734,  106,  734,  106,  734,  106,  106,  106,  106,  106,
+      734,  734,  734,  734,  106,  734,  106,  734,  106,  734,
+      106,  734,  106,  408,  734,  106,  734,  734,  734,  734,
+      734,  407,  106,  734,  106,  734,  106,  345,  345,  345,
+      345,  106,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  346,  346,  346,  346,  346,  346,  346,  346,  412,
 
-      725,  414,  100,  725,  100,  100,  100,  100,  100,  100,
-      100,  100,  100,  100,  100,  725,  100,  100,  725,  725,
-      725,  725,  725,  100,  100,  100,  100,  100,  415,  725,
-      100,  725,  100,  725,  100,  100,  100,  100,  100,  725,
-      416,  725,  725,  100,  417,  100,  725,  100,  725,  100,
-      725,  100,  725,  725,  725,  418,  100,  100,  100,  100,
-      725,  419,  725,  725,  100,  420,  725,  725,  100,  100,
-      100,  421,  100,  725,  725,  100,  725,  100,  422,  100,
-      725,  100,  423,  100,  725,  100,  100,  100,  100,  100,
-      725,  725,  725,  725,  100,  725,  100,  100,  100,  725,
+      412,  412,  412,  734,  734,  734,  734,  734,  734,  413,
+      734,  734,  734,  346,  346,  346,  346,  346,  346,  346,
+      346,  347,  347,  347,  347,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  348,  348,  348,  348,  348,
+      348,  348,  348,  413,  734,  106,  106,  348,  348,  348,
+      348,  348,  348,  348,  348,  106,  106,  106,  106,  106,
+      106,  106,  418,  417,  106,  106,  734,  734,  734,  734,
+      734,  106,  734,  106,  734,  106,  419,  106,  734,  414,
+      106,  734,  421,  106,  734,  734,  734,  106,  734,  106,
+      734,  106,  734,  106,  734,  106,  106,  106,  106,  422,
 
-      100,  725,  424,  725,  725,  100,  725,  100,  725,  100,
-      725,  100,  100,  426,  725,  425,  100,  725,  100,  725,
-      725,  725,  100,  725,  100,  725,  100,  725,  100,  100,
-      100,  100,  100,  725,  725,  100,  427,  100,  725,  100,
-      725,  100,  725,  100,  725,  100,  428,  429,  100,  100,
-      100,  100,  725,  725,  100,  725,  725,  725,  433,  725,
-      100,  100,  100,  100,  100,  100,  725,  725,  100,  100,
-      100,  100,  434,  725,  435,  725,  725,  725,  100,  725,
-      100,  100,  100,  100,  725,  100,  436,  100,  100,  100,
-      100,  437,  725,  725,  725,  725,  725,  725,  100,  100,
+      734,  106,  106,  734,  423,  734,  734,  734,  106,  106,
+      106,  106,  106,  106,  734,  106,  734,  106,  734,  106,
+      106,  106,  106,  106,  734,  734,  734,  734,  106,  734,
+      106,  734,  106,  734,  424,  734,  106,  734,  106,  734,
+      106,  106,  106,  734,  106,  426,  425,  734,  106,  106,
+      106,  106,  106,  734,  734,  734,  734,  106,  734,  106,
+      734,  427,  428,  106,  734,  106,  429,  734,  734,  106,
+      106,  106,  106,  106,  430,  734,  734,  734,  106,  734,
+      106,  734,  106,  431,  106,  734,  106,  432,  106,  734,
+      106,  106,  106,  734,  106,  734,  106,  734,  106,  106,
 
-      438,  100,  100,  100,  100,  725,  725,  100,  100,  725,
-      100,  725,  725,  440,  100,  725,  100,  725,  100,  725,
-      100,  100,  100,  439,  100,  442,  725,  725,  443,  100,
-      725,  100,  725,  100,  100,  100,  725,  725,  441,  725,
-      100,  725,  100,  725,  100,  100,  100,  725,  100,  725,
-      725,  725,  100,  100,  100,  100,  100,  100,  100,  100,
-      445,  100,  725,  725,  100,  725,  100,  725,  100,  725,
-      100,  725,  100,  725,  100,  725,  100,  100,  446,  725,
-      100,  725,  100,  725,  100,  100,  100,  725,  100,  725,
-      448,  725,  100,  100,  450,  100,  100,  725,  725,  725,
+      106,  734,  106,  734,  433,  734,  106,  106,  106,  734,
+      106,  106,  435,  734,  434,  106,  734,  106,  734,  734,
+      734,  106,  734,  106,  734,  106,  734,  106,  106,  106,
+      106,  106,  734,  734,  106,  436,  106,  734,  106,  734,
+      106,  734,  106,  734,  106,  437,  438,  106,  106,  106,
+      106,  734,  734,  106,  734,  734,  734,  442,  734,  106,
+      106,  106,  106,  106,  106,  734,  734,  106,  106,  106,
+      106,  443,  734,  444,  734,  734,  734,  106,  734,  106,
+      106,  106,  106,  734,  106,  445,  106,  106,  106,  106,
+      446,  734,  734,  734,  734,  734,  734,  106,  106,  447,
 
-      725,  100,  725,  725,  725,  100,  725,  100,  100,  100,
-      725,  100,  725,  451,  100,  453,  725,  725,  100,  100,
-      100,  100,  100,  454,  455,  100,  725,  100,  725,  100,
-      100,  100,  100,  100,  725,  725,  725,  725,  100,  725,
-      725,  725,  100,  100,  100,  725,  100,  725,  725,  100,
-      725,  100,  459,  100,  456,  100,  725,  100,  725,  100,
-      100,  100,  100,  100,  725,  725,  725,  725,  100,  725,
-      100,  100,  100,  725,  100,  725,  460,  725,  725,  100,
-      725,  100,  725,  100,  725,  100,  466,  466,  466,  466,
-      100,  725,  725,  725,  725,  725,  725,  725,  100,  725,
+      106,  106,  106,  106,  734,  734,  106,  106,  734,  106,
+      734,  734,  449,  106,  734,  106,  734,  106,  734,  106,
+      106,  106,  448,  106,  451,  734,  734,  452,  106,  734,
+      106,  734,  106,  106,  106,  734,  734,  450,  734,  106,
+      734,  106,  734,  106,  106,  106,  734,  106,  734,  734,
+      734,  106,  106,  106,  106,  106,  106,  106,  106,  454,
+      106,  734,  734,  106,  734,  106,  734,  106,  734,  106,
+      734,  106,  734,  106,  734,  106,  106,  455,  734,  106,
+      734,  106,  734,  106,  106,  106,  734,  106,  734,  457,
+      734,  106,  106,  459,  106,  106,  734,  734,  734,  734,
 
-      467,  467,  467,  467,  467,  467,  467,  467,  100,  725,
-      100,  100,  100,  470,  100,  462,  725,  100,  725,  725,
-      725,  100,  100,  100,  100,  100,  100,  725,  100,  471,
-      100,  725,  100,  100,  473,  100,  100,  725,  100,  725,
-      725,  100,  725,  725,  725,  100,  725,  100,  100,  100,
-      100,  725,  100,  474,  100,  100,  725,  100,  475,  725,
-      476,  100,  725,  725,  725,  100,  725,  100,  725,  100,
-      725,  100,  100,  100,  100,  100,  725,  725,  100,  725,
-      100,  725,  100,  725,  477,  725,  100,  725,  100,  725,
-      100,  100,  100,  100,  725,  479,  478,  100,  725,  100,
+      106,  734,  734,  734,  106,  734,  106,  106,  106,  734,
+      106,  734,  460,  106,  462,  734,  734,  106,  106,  106,
+      106,  106,  463,  464,  106,  734,  106,  734,  106,  106,
+      106,  106,  106,  734,  734,  734,  734,  106,  734,  734,
+      734,  106,  106,  106,  734,  106,  734,  734,  106,  734,
+      106,  468,  106,  465,  106,  734,  106,  734,  106,  106,
+      106,  106,  106,  734,  734,  734,  734,  106,  734,  106,
+      106,  106,  734,  106,  734,  469,  734,  734,  106,  734,
+      106,  734,  106,  734,  106,  475,  475,  475,  475,  106,
+      734,  734,  734,  734,  734,  734,  734,  106,  734,  476,
 
-      725,  725,  725,  100,  725,  100,  725,  100,  725,  100,
-      725,  100,  100,  100,  725,  725,  100,  480,  100,  481,
-      725,  725,  100,  725,  482,  725,  100,  725,  100,  725,
-      100,  725,  100,  100,  100,  100,  100,  725,  484,  100,
-      725,  100,  725,  100,  725,  483,  725,  100,  725,  100,
-      100,  100,  100,  100,  725,  725,  100,  725,  100,  725,
-      100,  725,  100,  485,  100,  725,  100,  100,  100,  100,
-      100,  725,  725,  100,  725,  100,  725,  100,  725,  100,
-      487,  100,  725,  100,  486,  100,  100,  100,  488,  100,
-      100,  725,  100,  725,  492,  725,  725,  725,  725,  100,
+      476,  476,  476,  476,  476,  476,  476,  106,  734,  106,
+      106,  106,  479,  106,  734,  471,  106,  734,  734,  734,
+      106,  106,  106,  106,  106,  106,  734,  106,  480,  106,
+      734,  106,  106,  482,  106,  106,  734,  106,  734,  734,
+      106,  734,  734,  734,  106,  734,  106,  106,  106,  106,
+      734,  106,  483,  106,  106,  734,  106,  484,  734,  485,
+      106,  734,  734,  734,  106,  734,  106,  734,  106,  734,
+      106,  106,  106,  106,  106,  734,  734,  106,  734,  106,
+      734,  106,  734,  486,  734,  106,  734,  106,  734,  106,
+      106,  106,  106,  734,  488,  487,  106,  734,  106,  734,
 
-      100,  100,  100,  100,  100,  100,  725,  725,  100,  100,
-      725,  100,  493,  494,  725,  100,  725,  100,  725,  100,
-      725,  100,  100,  100,  100,  100,  725,  725,  100,  725,
-      100,  496,  100,  725,  100,  725,  100,  725,  100,  495,
-      100,  100,  100,  100,  497,  725,  725,  100,  725,  100,
-      498,  725,  725,  100,  725,  100,  725,  100,  725,  100,
-      100,  100,  100,  100,  725,  725,  725,  725,  100,  725,
-      100,  725,  100,  725,  100,  100,  499,  725,  500,  100,
-      725,  100,  725,  725,  725,  100,  725,  100,  725,  100,
-      725,  100,  100,  100,  100,  100,  725,  725,  501,  725,
+      734,  734,  106,  734,  106,  734,  106,  734,  106,  734,
+      106,  106,  106,  734,  734,  106,  489,  106,  490,  734,
+      734,  106,  734,  491,  734,  106,  734,  106,  734,  106,
+      734,  106,  106,  106,  106,  106,  734,  493,  106,  734,
+      106,  734,  106,  734,  492,  734,  106,  734,  106,  106,
+      106,  106,  106,  734,  734,  106,  734,  106,  734,  106,
+      734,  106,  494,  106,  734,  106,  106,  106,  106,  106,
+      734,  734,  106,  734,  106,  734,  106,  734,  106,  496,
+      106,  734,  106,  495,  106,  106,  106,  497,  106,  106,
+      734,  106,  734,  501,  734,  734,  734,  734,  106,  106,
 
-      100,  725,  100,  725,  100,  100,  100,  504,  100,  725,
-      725,  100,  725,  725,  725,  100,  100,  506,  100,  100,
-      100,  725,  100,  725,  100,  725,  100,  100,  100,  100,
-      100,  725,  509,  725,  508,  100,  725,  100,  725,  100,
-      725,  100,  725,  100,  725,  725,  725,  100,  100,  100,
-      725,  100,  100,  512,  725,  100,  100,  511,  100,  725,
-      725,  725,  100,  725,  100,  100,  100,  100,  100,  100,
-      100,  100,  100,  100,  100,  725,  100,  100,  725,  725,
-      725,  725,  725,  100,  725,  100,  100,  100,  100,  725,
-      100,  725,  100,  515,  725,  100,  466,  466,  466,  466,
+      106,  106,  106,  106,  106,  734,  734,  106,  106,  734,
+      106,  502,  503,  734,  106,  734,  106,  734,  106,  734,
+      106,  106,  106,  106,  106,  734,  734,  106,  734,  106,
+      505,  106,  734,  106,  734,  106,  734,  106,  504,  106,
+      106,  106,  106,  506,  734,  734,  106,  734,  106,  507,
+      734,  734,  106,  734,  106,  734,  106,  734,  106,  106,
+      106,  106,  106,  734,  734,  734,  734,  106,  734,  106,
+      734,  106,  734,  106,  106,  508,  734,  509,  106,  734,
+      106,  734,  734,  734,  106,  734,  106,  734,  106,  734,
+      106,  106,  106,  106,  106,  734,  734,  510,  734,  106,
 
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      467,  467,  467,  467,  467,  467,  467,  467,  521,  725,
-      100,  725,  467,  467,  467,  467,  467,  467,  467,  467,
-      100,  725,  100,  100,  100,  725,  100,  725,  524,  100,
-      525,  725,  725,  100,  725,  100,  100,  100,  100,  725,
-      100,  100,  100,  725,  527,  100,  725,  100,  725,  725,
-      725,  100,  725,  100,  725,  100,  725,  100,  100,  528,
-      100,  100,  725,  725,  100,  529,  100,  725,  100,  725,
-      100,  530,  100,  725,  100,  100,  100,  100,  100,  725,
-      725,  100,  725,  100,  725,  100,  725,  100,  725,  100,
+      734,  106,  734,  106,  106,  106,  513,  106,  734,  734,
+      106,  734,  734,  734,  106,  106,  515,  106,  106,  106,
+      734,  106,  734,  106,  734,  106,  106,  106,  106,  106,
+      734,  518,  734,  517,  106,  734,  106,  734,  106,  734,
+      106,  734,  106,  734,  734,  734,  106,  106,  106,  734,
+      106,  106,  521,  734,  106,  106,  520,  106,  734,  734,
+      734,  106,  734,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  734,  106,  106,  734,  734,  734,
+      734,  734,  106,  734,  106,  106,  106,  106,  734,  106,
+      734,  106,  524,  734,  106,  475,  475,  475,  475,  734,
 
-      725,  100,  100,  100,  100,  100,  725,  725,  725,  531,
-      100,  725,  100,  100,  100,  532,  100,  725,  725,  100,
-      725,  100,  725,  100,  725,  100,  725,  100,  725,  100,
-      100,  100,  100,  100,  725,  533,  100,  725,  100,  725,
-      100,  725,  100,  725,  100,  725,  100,  100,  100,  100,
-      100,  725,  725,  725,  534,  100,  725,  100,  100,  100,
-      725,  100,  725,  725,  536,  535,  100,  725,  100,  725,
-      100,  725,  100,  725,  100,  100,  100,  100,  100,  725,
-      725,  100,  725,  100,  725,  537,  725,  100,  542,  100,
-      725,  100,  100,  100,  100,  100,  725,  725,  725,  725,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  476,
+      476,  476,  476,  476,  476,  476,  476,  530,  734,  106,
+      734,  476,  476,  476,  476,  476,  476,  476,  476,  106,
+      734,  106,  106,  106,  734,  106,  734,  533,  106,  534,
+      734,  734,  106,  734,  106,  106,  106,  106,  734,  106,
+      106,  106,  734,  536,  106,  734,  106,  734,  734,  734,
+      106,  734,  106,  734,  106,  734,  106,  106,  537,  106,
+      106,  734,  734,  106,  538,  106,  734,  106,  734,  106,
+      539,  106,  734,  106,  106,  106,  106,  106,  734,  734,
+      106,  734,  106,  734,  106,  734,  106,  734,  106,  734,
 
-      100,  725,  100,  100,  100,  725,  100,  725,  725,  100,
-      543,  100,  725,  100,  725,  100,  725,  100,  725,  100,
-      100,  100,  100,  100,  725,  725,  100,  725,  100,  545,
-      100,  725,  100,  725,  100,  725,  100,  544,  100,  100,
-      100,  100,  100,  725,  725,  100,  725,  725,  725,  725,
-      725,  100,  100,  100,  100,  100,  100,  100,  547,  546,
-      100,  100,  725,  100,  725,  725,  725,  100,  725,  100,
-      725,  100,  725,  100,  100,  100,  100,  100,  725,  725,
-      100,  725,  100,  725,  551,  725,  100,  725,  100,  725,
-      100,  100,  100,  100,  100,  725,  725,  725,  725,  100,
+      106,  106,  106,  106,  106,  734,  734,  734,  540,  106,
+      734,  106,  106,  106,  541,  106,  734,  734,  106,  734,
+      106,  734,  106,  734,  106,  734,  106,  734,  106,  106,
+      106,  106,  106,  734,  542,  106,  734,  106,  734,  106,
+      734,  106,  734,  106,  734,  106,  106,  106,  106,  106,
+      734,  734,  734,  543,  106,  734,  106,  106,  106,  734,
+      106,  734,  734,  545,  544,  106,  734,  106,  734,  106,
+      734,  106,  734,  106,  106,  106,  106,  106,  734,  734,
+      106,  734,  106,  734,  546,  734,  106,  551,  106,  734,
+      106,  106,  106,  106,  106,  734,  734,  734,  734,  106,
 
-      725,  100,  100,  100,  725,  100,  725,  548,  100,  725,
-      100,  555,  100,  725,  100,  725,  100,  725,  100,  725,
-      100,  100,  100,  100,  725,  725,  556,  100,  559,  100,
-      725,  725,  725,  100,  725,  100,  725,  100,  725,  100,
-      725,  100,  100,  100,  564,  564,  564,  564,  100,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  565,  565,
-      565,  565,  565,  565,  565,  565,  100,  100,  569,  725,
-      725,  725,  725,  568,  725,  725,  100,  100,  100,  100,
-      100,  100,  100,  725,  725,  100,  100,  725,  725,  725,
-      100,  725,  100,  100,  100,  725,  100,  725,  571,  725,
+      734,  106,  106,  106,  734,  106,  734,  734,  106,  552,
+      106,  734,  106,  734,  106,  734,  106,  734,  106,  106,
+      106,  106,  106,  734,  734,  106,  734,  106,  554,  106,
+      734,  106,  734,  106,  734,  106,  553,  106,  106,  106,
+      106,  106,  734,  734,  106,  734,  734,  734,  734,  734,
+      106,  106,  106,  106,  106,  106,  106,  556,  555,  106,
+      106,  734,  106,  734,  734,  734,  106,  734,  106,  734,
+      106,  734,  106,  106,  106,  106,  106,  734,  734,  106,
+      734,  106,  734,  560,  734,  106,  734,  106,  734,  106,
+      106,  106,  106,  106,  734,  734,  106,  734,  106,  734,
 
-      100,  100,  100,  100,  100,  573,  100,  100,  572,  100,
-      725,  725,  100,  576,  100,  725,  100,  725,  574,  725,
-      100,  725,  100,  725,  100,  100,  100,  575,  100,  725,
-      100,  725,  100,  100,  100,  725,  100,  725,  725,  725,
-      100,  100,  100,  100,  100,  725,  577,  725,  725,  100,
-      725,  100,  725,  100,  725,  100,  725,  100,  725,  100,
-      725,  100,  100,  100,  725,  100,  578,  100,  725,  100,
-      100,  100,  725,  100,  725,  725,  725,  100,  100,  100,
-      100,  100,  725,  583,  725,  725,  100,  725,  100,  725,
-      100,  100,  100,  725,  100,  725,  725,  725,  100,  100,
+      106,  734,  106,  734,  106,  734,  106,  557,  106,  106,
+      106,  106,  734,  734,  564,  106,  734,  106,  734,  734,
+      565,  106,  734,  106,  734,  106,  734,  106,  734,  106,
+      106,  106,  568,  106,  734,  734,  106,  734,  734,  573,
+      573,  573,  573,  106,  734,  106,  734,  106,  734,  734,
+      734,  734,  106,  574,  574,  574,  574,  574,  574,  574,
+      574,  106,  106,  578,  734,  734,  734,  734,  577,  734,
+      734,  106,  106,  106,  106,  106,  106,  106,  734,  734,
+      106,  106,  734,  734,  734,  106,  734,  106,  106,  106,
+      734,  106,  734,  580,  734,  106,  106,  106,  106,  106,
 
-      100,  100,  100,  100,  100,  100,  725,  100,  725,  725,
-      100,  725,  100,  725,  100,  100,  100,  725,  100,  584,
-      725,  725,  100,  100,  100,  100,  100,  100,  100,  100,
-      725,  100,  592,  585,  100,  725,  100,  725,  100,  725,
-      100,  725,  100,  725,  725,  725,  100,  100,  100,  100,
-      100,  725,  100,  725,  725,  100,  725,  725,  725,  100,
-      725,  100,  595,  100,  100,  725,  100,  725,  100,  725,
-      725,  100,  564,  564,  564,  564,  725,  725,  725,  725,
-      725,  725,  725,  725,  100,  725,  565,  565,  565,  565,
-      565,  565,  565,  565,  100,  100,  100,  604,  100,  725,
+      582,  106,  106,  581,  106,  734,  734,  106,  585,  106,
+      734,  106,  734,  583,  734,  106,  734,  106,  734,  106,
+      106,  106,  584,  106,  734,  106,  734,  106,  106,  106,
+      734,  106,  734,  734,  734,  106,  106,  106,  106,  106,
+      734,  586,  734,  734,  106,  734,  106,  734,  106,  734,
+      106,  734,  106,  734,  106,  734,  106,  106,  106,  734,
+      106,  587,  106,  734,  106,  106,  106,  734,  106,  734,
+      734,  734,  106,  106,  106,  106,  106,  734,  592,  734,
+      734,  106,  734,  106,  734,  106,  106,  106,  734,  106,
+      734,  734,  734,  106,  106,  106,  106,  106,  106,  106,
 
-      725,  100,  725,  100,  725,  100,  725,  100,  725,  100,
-      725,  100,  100,  100,  100,  100,  725,  725,  100,  725,
-      100,  606,  100,  725,  100,  725,  100,  725,  100,  605,
-      100,  100,  100,  100,  100,  725,  725,  100,  607,  725,
-      725,  725,  725,  100,  100,  100,  608,  100,  100,  100,
-      100,  610,  100,  100,  725,  725,  725,  725,  725,  100,
-      611,  100,  100,  100,  100,  100,  725,  725,  100,  100,
-      725,  725,  725,  100,  725,  100,  725,  100,  725,  100,
-      725,  615,  725,  100,  100,  100,  616,  100,  100,  100,
-      725,  725,  100,  725,  725,  617,  725,  725,  100,  100,
+      106,  734,  106,  734,  734,  106,  734,  106,  734,  106,
+      106,  106,  734,  106,  593,  734,  734,  106,  106,  106,
+      106,  106,  106,  106,  106,  734,  106,  601,  594,  106,
+      734,  106,  734,  106,  734,  106,  734,  106,  734,  734,
+      734,  106,  106,  106,  106,  106,  734,  106,  734,  734,
+      106,  734,  734,  734,  106,  734,  106,  604,  106,  106,
+      734,  106,  734,  106,  734,  734,  106,  573,  573,  573,
+      573,  734,  734,  734,  734,  734,  734,  734,  734,  106,
+      734,  574,  574,  574,  574,  574,  574,  574,  574,  106,
+      106,  106,  613,  106,  734,  734,  106,  734,  106,  734,
 
-      100,  100,  100,  100,  100,  100,  725,  100,  100,  725,
-      725,  725,  725,  725,  100,  100,  632,  100,  100,  100,
-      100,  100,  633,  100,  100,  725,  725,  725,  725,  725,
-      100,  100,  100,  100,  100,  100,  100,  100,  725,  100,
-      100,  725,  725,  725,  725,  725,  100,  100,  100,  100,
-      100,  100,  100,  634,  725,  100,  100,  725,  100,  636,
-      725,  725,  100,  725,  100,  725,  100,  725,  100,  100,
-      100,  100,  100,  725,  725,  725,  725,  100,  725,  100,
-      100,  640,  725,  100,  725,  725,  100,  725,  100,  725,
-      100,  725,  100,  641,  100,  725,  100,  100,  100,  100,
+      106,  734,  106,  734,  106,  734,  106,  106,  106,  106,
+      106,  734,  734,  106,  734,  106,  615,  106,  734,  106,
+      734,  106,  734,  106,  614,  106,  106,  106,  106,  106,
+      734,  734,  106,  616,  734,  734,  734,  734,  106,  106,
+      106,  617,  106,  106,  106,  106,  619,  106,  106,  734,
+      734,  734,  734,  734,  106,  620,  106,  106,  106,  106,
+      106,  734,  734,  106,  106,  734,  734,  734,  106,  734,
+      106,  734,  106,  734,  106,  734,  624,  734,  106,  106,
+      106,  625,  106,  106,  106,  734,  734,  106,  734,  734,
+      626,  734,  734,  106,  106,  106,  106,  106,  106,  106,
 
-      100,  725,  725,  100,  725,  100,  725,  100,  725,  100,
-      725,  100,  725,  100,  100,  100,  100,  100,  725,  725,
-      725,  725,  100,  725,  100,  100,  100,  725,  100,  725,
-      725,  100,  656,  100,  725,  100,  725,  100,  725,  100,
-      725,  100,  660,  661,  100,  100,  100,  100,  725,  725,
-      100,  725,  725,  725,  725,  725,  100,  100,  100,  100,
-      100,  100,  100,  100,  725,  100,  100,  725,  725,  676,
-      725,  725,  100,  100,  100,  100,  100,  100,  725,  725,
-      725,  100,  100,   54,   54,   54,   54,   54,   54,   54,
-       54,   54,   54,   54,   54,   54,   54,   59,   59,   59,
+      106,  734,  106,  106,  734,  734,  734,  734,  734,  106,
+      106,  641,  106,  106,  106,  106,  106,  642,  106,  106,
+      734,  734,  734,  734,  734,  106,  106,  106,  106,  106,
+      106,  106,  106,  734,  106,  106,  734,  734,  734,  734,
+      734,  106,  106,  106,  106,  106,  106,  106,  643,  734,
+      106,  106,  734,  106,  645,  734,  734,  106,  734,  106,
+      734,  106,  734,  106,  106,  106,  106,  106,  734,  734,
+      734,  734,  106,  734,  106,  106,  649,  734,  106,  734,
+      734,  106,  734,  106,  734,  106,  734,  106,  650,  106,
+      734,  106,  106,  106,  106,  106,  734,  734,  106,  734,
 
-       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
-       59,   64,   64,   64,   64,   64,   64,   64,   64,   64,
-       64,   64,   64,   64,   64,   67,   67,   67,   67,   67,
-       67,   67,   67,   67,   67,   67,   67,   67,   67,   76,
+      106,  734,  106,  734,  106,  734,  106,  734,  106,  106,
+      106,  106,  106,  734,  734,  734,  734,  106,  734,  106,
+      106,  106,  734,  106,  734,  734,  106,  665,  106,  734,
+      106,  734,  106,  734,  106,  734,  106,  669,  670,  106,
+      106,  106,  106,  734,  734,  106,  734,  734,  734,  734,
+      734,  106,  106,  106,  106,  106,  106,  106,  106,  734,
+      106,  106,  734,  734,  685,  734,  734,  106,  106,  106,
+      106,  106,  106,  734,  734,  734,  106,  106,   54,   54,
+       54,   54,   54,   54,   54,   54,   54,   54,   54,   54,
+       54,   59,   59,   59,   59,   59,   59,   59,   59,   59,
+
+       59,   59,   59,   59,   64,   64,   64,   64,   64,   64,
+       64,   64,   64,   64,   64,   64,   64,   67,   67,   67,
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
        76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
-       76,   76,   76,   78,   78,   78,   78,   78,   78,   78,
-       78,   78,   78,   78,   78,   78,   78,   85,   85,   85,
-       85,  725,   85,   85,   85,   85,   85,   85,   85,   85,
-       85,   92,   92,   92,  725,  725,   92,  725,   92,  725,
-       92,  157,  157,  725,  157,  157,  161,  161,  725,  725,
+       76,   76,   76,   91,   91,   91,   91,  734,   91,   91,
+       91,   91,   91,   91,   91,   91,   98,   98,   98,  734,
+       98,  734,   98,  734,   98,  163,  163,  734,  163,  163,
+      167,  167,  734,  734,  167,  167,  734,  167,  167,  167,
+      167,  167,  167,  171,  171,  171,  171,  734,  171,  171,
+      171,  171,  171,  171,  171,  171,  173,  173,  173,  173,
 
-      161,  161,  161,  725,  161,  161,  161,  161,  161,  161,
-      165,  165,  165,  165,  725,  165,  165,  165,  165,  165,
-      165,  165,  165,  165,  167,  167,  167,  167,  167,  167,
-      167,  167,  167,  725,  167,  167,  169,  725,  725,  725,
-      169,  169,  169,  169,  169,  169,  169,  169,  170,  725,
-      725,  725,  170,  170,  170,  170,  170,  170,  170,  170,
-      172,  725,  725,  725,  172,  725,  172,  172,  172,  172,
-      172,  172,  177,  177,  725,  177,  177,  179,  179,  725,
-      179,  179,  187,  725,  187,  187,  106,  106,  725,  106,
-      106,  255,  725,  255,  255,  263,  725,  263,  263,  264,
+      173,  173,  173,  173,  734,  173,  173,  175,  734,  734,
+      734,  175,  175,  175,  175,  175,  175,  175,  176,  734,
+      734,  734,  176,  176,  176,  176,  176,  176,  176,  181,
+      181,  734,  181,  181,  185,  185,  734,  185,  185,  187,
+      187,  734,  187,  187,  195,  734,  195,  195,  112,  112,
+      734,  112,  112,  263,  734,  263,  263,  270,  734,  270,
+      270,  272,  734,  272,  272,  273,  734,  273,  273,  276,
+      276,  276,  276,  276,  276,  276,  276,  276,  276,  276,
+      276,  276,  196,  196,  734,  196,  196,  576,  576,  734,
+      576,  576,  576,  576,  576,  576,  576,  576,  576,  576,
 
-      725,  264,  264,  267,  267,  267,  267,  267,  267,  267,
-      267,  267,  267,  267,  267,  267,  267,  188,  188,  725,
-      188,  188,  567,  567,  725,  567,  567,  567,  567,  567,
-      567,  567,  567,  567,  567,  567,  565,  565,  565,  725,
-      725,  725,  725,  565,  725,  725,  725,  725,  565,   17,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
+      574,  574,  574,  734,  734,  734,  574,  734,  734,  734,
+      734,  574,   17,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734
 
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725
     } ;
 
-static yyconst short int yy_chk[4432] =
+static yyconst short int yy_chk[4496] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1259,492 +1269,499 @@
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    3,    3,    3,    4,    4,    4,    5,    5,    5,
-       11,    3,    9,    7,    4,    8,    9,    5,    6,    6,
+        1,    1,    3,    3,    3,    4,    4,    4,    5,    5,
+        5,   11,    3,    9,    7,    4,    8,    9,    5,    6,
 
-        6,    7,   10,    8,   12,    7,   10,    8,    6,  122,
-       28,   11,   28,   93,   11,   89,    7,  311,    8,   40,
-      183,   15,   15,   15,   15,   12,   93,   15,   12,   40,
-      723,   40,  566,   40,   16,   16,   16,   16,   40,  180,
-       16,   19,   19,   19,   19,  180,   89,  183,   19,   20,
-       20,   20,   20,  122,  260,  260,   20,   24,   24,   24,
-       24,  566,  722,  311,   24,   26,   11,  251,   11,   26,
-      131,   24,   24,   26,   26,   26,   26,   26,   26,   26,
-       12,  136,   12,   13,   13,   13,   13,   13,   13,   13,
-       13,   13,   13,   13,   13,   13,   13,   13,   15,  121,
+        6,    6,    7,   10,    8,   12,    7,   10,    8,    6,
+       95,   28,   11,   28,  147,   11,  259,    7,   80,    8,
+       19,   19,   19,   19,  127,  142,   12,   19,  156,   12,
+       20,   20,   20,   20,   80,   99,  732,   20,   24,   24,
+       24,   24,   95,  188,  531,   24,   26,  731,   99,  188,
+       26,  531,   24,   24,   26,   26,   26,   26,   26,   26,
+       26,   78,   78,   78,   78,  137,   80,  147,   11,  128,
+       11,   30,   30,   30,   30,   30,   30,   30,   30,  142,
+      259,  127,   12,  156,   12,   13,   13,   13,   13,   13,
+       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
 
-       15,   79,   79,   79,   79,  334,   13,   13,   13,   13,
-       13,   16,  214,   16,   43,   13,   30,   30,   30,   30,
-       30,   30,   30,   30,   43,  131,   43,  215,   43,   34,
-      251,  141,   34,   43,  136,   37,   34,   13,   13,   34,
-       34,   34,   34,   34,  296,   37,   37,   37,   34,   37,
-      334,  153,   34,  150,   37,  121,  236,   37,  295,   43,
-      214,   13,   13,   13,   14,   14,   14,   14,   14,   14,
-       14,   14,   14,   14,   14,   14,   14,   14,   14,   80,
-       80,   80,   80,  141,   81,  215,  154,   14,   14,   14,
-       14,   14,   35,  226,  270,  296,   14,  720,   35,  182,
+       79,   79,   79,   79,   90,   90,   90,   90,   13,   13,
+       13,   13,   13,   34,  128,  191,   34,   13,  279,   36,
+       34,  137,   36,   34,   34,   34,   34,   34,  223,   36,
+      159,   36,   34,   36,   40,  261,   34,   35,   36,   13,
+       13,   13,  191,   35,   40,  279,   40,   35,   40,   35,
+       35,   35,  244,   40,  160,  222,   35,  178,  178,  178,
+      178,  268,  268,  234,   13,   13,   13,   14,   14,   14,
+       14,   14,   14,   14,   14,   14,   14,   14,   14,   14,
+       14,   14,  238,  159,  177,  177,   37,  223,  261,  407,
+       14,   14,   14,   14,   14,  177,   37,   37,   37,   14,
 
-       81,  182,   35,  153,   35,   35,   35,  150,  447,  182,
-       36,   35,  236,   36,  230,   38,   38,  295,   14,   14,
-       36,  270,   36,  720,   36,  592,   38,  447,   38,   36,
-       38,   81,   38,  154,  333,   38,   41,   41,  719,   41,
-      341,  226,   14,   14,   14,   23,  154,   41,   41,   41,
-      341,   41,  171,  171,   41,  592,   41,   84,   84,   84,
-       84,   23,  230,  171,  253,   23,   23,   23,   23,   23,
+       37,  190,  160,  190,  222,   37,   44,   44,   37,  244,
+       44,  190,  234,   38,   38,  160,   44,  278,   44,  278,
+       44,   14,   14,   14,   38,   44,   38,  278,   38,  728,
+       38,  238,  727,   38,  350,   44,  100,  100,  100,  100,
+      100,  100,  100,  100,  350,  407,   14,   14,   14,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+       15,   23,  343,  415,   97,   97,   97,   97,  415,  726,
+      725,   97,  647,  304,  316,  724,  723,   23,   97,   97,
+      722,   23,   23,   23,   23,   23,   23,   23,   23,   23,
+       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
+       23,   23,   23,   23,   23,   23,   23,  647,  343,   23,
        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
-       23,  333,   23,   23,   23,   23,   23,   23,   23,   23,
 
-       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
-       23,   23,   23,   23,   23,   33,  253,  718,   33,   33,
-       33,   33,   33,   33,   33,   33,  173,  173,  173,  173,
-      307,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-       33,   33,   33,   33,   33,   33,   33,  247,  316,   33,
+       23,   23,   33,  304,  316,   33,   33,   33,   33,   33,
+       33,   33,   33,  721,  325,  342,  335,  720,   33,   33,
        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-       33,   39,  252,  347,  332,  717,   42,   42,  269,  307,
-      269,   39,  385,   39,   42,   39,  367,   42,  269,   42,
+       33,   33,   33,   33,  255,  305,  375,   33,   33,   33,
+       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
+       33,   33,   33,   33,   33,   33,   33,   33,   33,   39,
+      260,  320,  341,  342,   41,   41,  325,   41,  335,   39,
+      356,   39,  392,   39,  376,   41,   41,   41,   39,   41,
+       43,  375,   41,  255,   41,   42,   42,  305,  394,  410,
 
-       39,   42,  716,   44,   44,  247,   42,   44,  326,  368,
-      366,  402,   39,   44,  388,   44,  385,   44,  715,  316,
-      458,  714,   44,   39,   45,   45,   46,   45,  379,   46,
-      252,   44,  332,  383,  398,   45,   46,   45,   46,   45,
-       46,   45,  347,   47,   45,   46,   47,  394,  367,  401,
-       47,   48,  393,   47,  366,   47,  400,   47,  388,   48,
-       48,   47,   47,   49,  411,  402,   47,   45,  368,  326,
-       48,  431,   48,   49,   48,   49,   48,   49,   50,   48,
-      379,   49,   49,  444,  458,  490,   51,  518,   50,  398,
-       50,   48,   50,   51,  383,  394,   51,   50,   51,  406,
+       43,   39,   43,   42,   43,  377,   42,  402,   42,   43,
+       42,  397,   39,   45,   45,   42,   45,  719,  320,  260,
+      403,  341,  394,  481,   45,  388,   45,  409,   45,   46,
+       45,  411,   46,   45,  439,   47,   43,  376,   47,   46,
+      356,   46,   47,   46,  392,   47,  527,   47,   46,   47,
+      461,   48,   50,   47,   47,  601,  397,   45,   47,   48,
+       48,  410,   50,   49,   50,  377,   50,  402,  420,  403,
+       48,   50,   48,   49,   48,   49,   48,   49,  388,   48,
+      481,   49,   49,   51,  441,  601,  411,  409,   50,  439,
+       51,  527,   48,   51,  440,   51,  461,   51,   53,   53,
 
-       51,  461,   49,  452,  406,   51,   53,   53,   53,   53,
-      401,  393,  713,   50,  712,  400,  411,  431,  711,  490,
-       53,   53,   53,   53,   53,   53,   53,   53,   76,  444,
-      430,  518,  443,   76,   76,   76,   76,   76,   76,   76,
-       76,   76,   76,   91,   91,   91,   91,  432,  452,  461,
-       91,   76,   76,   76,   76,   76,  443,   91,   91,   94,
-       94,   94,   94,   94,   94,   94,   94,   97,   97,   97,
-       97,   97,   97,   97,   97,  100,  101,  457,  403,  403,
-      403,  403,   76,   76,  430,  100,  101,  100,  101,  100,
-      101,  102,  104,  101,  100,  101,  489,  472,  721,  432,
+       53,   53,   51,   49,  103,  103,  103,  103,  103,  103,
+      103,  103,   53,   53,   53,   53,   53,   53,   53,   53,
+       76,  420,  453,  456,  717,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,  452,  471,  441,  106,  107,
+      466,  440,  456,   76,   76,   76,   76,   76,  106,  107,
+      106,  107,  106,  107,  108,  715,  107,  106,  107,  452,
+      412,  412,  412,  412,  108,  467,  108,  109,  108,  453,
+      110,  499,  472,  108,   76,   76,   76,  109,  557,  109,
+      110,  109,  110,  470,  110,  111,  109,  473,  474,  110,
+      109,  519,  714,  466,  500,  111,  471,  111,  528,  111,
 
-      462,  102,  104,  102,  104,  102,  104,   76,   77,  503,
-      102,  104,  464,   77,   77,   77,   77,   77,   77,   77,
-       77,   77,   77,  463,  721,  491,  105,  103,  510,  457,
-      489,   77,   77,   77,   77,   77,  105,  103,  105,  103,
-      105,  103,  107,  503,  105,  105,  103,  107,  489,   77,
-      103,  519,  107,  472,  107,  108,  107,  403,  109,  462,
-      464,  107,   77,   77,  710,  108,  110,  108,  109,  108,
-      109,  465,  109,  108,  108,  538,  110,  109,  110,  110,
-      110,  491,  510,  463,  514,  110,  505,   77,   99,   99,
-       99,   99,   99,   99,   99,   99,   99,   99,   99,   99,
+       76,   77,  522,  111,  111,  499,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,  192,  192,  192,  192,
+      192,  192,  192,  192,   77,   77,   77,   77,   77,  113,
+      467,  512,  470,  472,  113,  114,  473,  474,  557,  113,
+      412,  113,   77,  113,  523,  114,  519,  114,  113,  114,
+      115,  500,  526,  114,  114,   77,   77,   77,  116,  522,
+      115,  514,  115,  528,  115,  512,  547,  549,  116,  115,
+      116,  116,  116,  713,  498,  529,  712,  116,  523,  535,
+      550,   77,  105,  105,  105,  105,  105,  105,  105,  105,
+      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
 
-       99,   99,   99,   99,   99,   99,   99,   99,   99,   99,
-      111,  526,  112,  112,  522,  519,  513,  520,  514,  465,
-      111,  522,  111,  112,  111,  112,  112,  112,  114,  111,
-      113,  113,  112,  540,  505,  552,  538,  548,  114,  114,
-      114,  113,  114,  113,  115,  113,  539,  114,  115,  541,
-      113,  520,  116,  517,  115,  708,  115,  613,  115,  706,
-      550,  526,  116,  115,  116,  561,  116,  117,  117,  117,
-      119,  116,  513,  118,  118,  554,  558,  117,  560,  117,
-      119,  117,  119,  118,  119,  118,  117,  118,  120,  119,
-      579,  118,  118,  123,  540,  552,  548,  562,  120,  541,
+      105,  105,  105,  105,  117,  526,  118,  118,  498,  529,
+      514,  561,  569,  710,  117,  566,  117,  118,  117,  118,
+      118,  118,  120,  117,  119,  119,  118,  498,  547,  549,
+      535,  550,  120,  120,  120,  119,  120,  119,  121,  119,
+      548,  120,  121,  559,  119,  709,  122,  570,  121,  563,
+      121,  567,  121,  572,  571,  575,  122,  121,  122,  600,
+      122,  123,  123,  123,  125,  122,  566,  124,  124,  569,
+      606,  123,  561,  123,  125,  123,  125,  124,  125,  124,
+      123,  124,  126,  125,  575,  124,  124,  129,  571,  588,
+      589,  674,  126,  600,  126,  126,  126,  129,  563,  585,
 
-      120,  120,  120,  123,  613,  517,  124,  120,  557,  124,
-      586,  539,  580,  123,  125,  123,  124,  123,  124,  561,
-      124,  550,  123,  554,  125,  124,  125,  563,  125,  126,
-      126,  562,  591,  125,  560,  596,  618,  558,  576,  126,
-      127,  126,  581,  126,  589,  588,  126,  126,  126,  579,
-      127,  128,  127,  127,  127,  594,  576,  129,  557,  127,
-      580,  128,  586,  128,  598,  128,  591,  129,  130,  129,
-      128,  129,  597,  128,  637,  599,  129,  612,  130,  705,
-      130,  132,  130,  704,  133,  596,  623,  130,  563,  132,
-      589,  132,  618,  132,  133,  132,  133,  134,  133,  621,
+      130,  126,  570,  130,  606,  559,  548,  129,  131,  129,
+      130,  129,  130,  567,  130,  572,  129,  585,  131,  130,
+      131,  598,  131,  132,  132,  627,  590,  131,  574,  574,
+      574,  574,  622,  132,  133,  132,  646,  132,  597,  589,
+      132,  132,  132,  729,  133,  134,  133,  133,  133,  588,
+      674,  135,  708,  133,  595,  134,  707,  134,  706,  134,
+      607,  135,  136,  135,  134,  135,  621,  134,  598,  729,
+      135,  603,  136,  605,  136,  138,  136,  608,  139,  623,
+      622,  136,  627,  138,  630,  138,  590,  138,  139,  138,
+      139,  140,  139,  646,  138,  629,  139,  139,  597,  141,
 
-      132,  581,  133,  133,  588,  135,  597,  134,  137,  134,
-      614,  134,  639,  620,  594,  135,  134,  135,  137,  135,
-      137,  138,  137,  135,  135,  598,  137,  137,  627,  612,
-      637,  138,  139,  138,  599,  138,  565,  565,  565,  565,
-      138,  138,  139,  644,  139,  140,  139,  623,  140,  625,
-      703,  139,  140,  701,  628,  140,  629,  140,  621,  140,
-      142,  142,  614,  649,  140,  620,  700,  143,  639,  638,
-      699,  142,  678,  142,  665,  142,  645,  143,  144,  143,
-      142,  143,  143,  698,  145,  143,  143,  697,  144,  627,
-      144,  647,  144,  147,  145,  146,  145,  144,  145,  644,
+      632,  140,  143,  140,  634,  140,  636,  595,  574,  141,
+      140,  141,  143,  141,  143,  144,  143,  141,  141,  621,
+      143,  143,  607,  637,  605,  144,  145,  144,  638,  144,
+      700,  603,  623,  656,  144,  144,  145,  608,  145,  146,
+      145,  648,  146,  699,  630,  145,  146,  653,  629,  146,
+      698,  146,  654,  146,  148,  148,  651,  634,  146,  730,
+      660,  149,  632,  697,  658,  148,  659,  148,  636,  148,
+      703,  149,  150,  149,  148,  149,  149,  661,  151,  149,
+      149,  638,  150,  637,  150,  730,  150,  153,  151,  152,
+      151,  150,  151,  656,  151,  694,  150,  151,  648,  152,
 
-      145,  625,  144,  145,  638,  146,  147,  146,  629,  146,
-      642,  657,  148,  628,  146,  565,  147,  148,  147,  649,
-      147,  652,  148,  149,  148,  147,  148,  678,  645,  151,
-      650,  148,  665,  149,  691,  149,  151,  149,  651,  151,
-      692,  151,  149,  151,  155,  152,  152,  690,  151,  152,
-      647,  659,  664,  682,  155,  152,  155,  152,  155,  152,
-      642,  657,  155,  155,  152,  158,  158,  158,  158,  184,
-      184,  184,  184,  184,  184,  184,  184,  652,  658,  158,
-      158,  158,  158,  158,  158,  158,  158,  159,  692,  650,
-      651,  159,  159,  159,  159,  159,  159,  159,  159,  160,
+      153,  152,  667,  152,  653,  654,  154,  651,  152,  687,
+      153,  154,  153,  660,  153,  666,  154,  155,  154,  153,
+      154,  658,  691,  157,  690,  154,  659,  155,  703,  155,
+      157,  155,  668,  157,  661,  157,  155,  157,  161,  158,
+      158,  676,  157,  158,  609,  609,  609,  609,  161,  158,
+      161,  158,  161,  158,  680,  667,  161,  161,  158,  164,
+      164,  164,  164,  673,  678,  687,  666,  689,  688,  711,
+      693,  695,  686,  164,  164,  164,  164,  164,  164,  164,
+      164,  165,  701,  668,  691,  165,  165,  165,  165,  165,
+      165,  165,  165,  166,  676,  679,  681,  166,  166,  166,
 
-      667,  659,  664,  160,  160,  160,  160,  160,  160,  160,
-      160,  187,  189,  190,  682,  189,  689,  688,  685,  681,
-      702,  694,  189,  190,  189,  190,  189,  190,  191,  192,
-      658,  189,  190,  600,  600,  600,  600,  671,  191,  192,
-      191,  192,  191,  192,  669,  680,  679,  191,  192,  684,
-      686,  670,  667,  677,  675,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,  187,  193,  694,  702,
-      672,  674,  673,  666,  687,  195,  663,  193,  196,  193,
-      193,  193,  195,  671,  669,  195,  193,  195,  196,  195,
+      166,  166,  166,  166,  166,  195,  197,  198,  684,  197,
+      683,  680,  682,  675,  673,  678,  197,  198,  197,  198,
+      197,  198,  199,  200,  609,  197,  198,  693,  695,  711,
+      696,  701,  199,  200,  199,  200,  199,  200,  704,  672,
+      671,  199,  200,  664,  663,  662,  657,  681,  679,  705,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,  201,  655,  652,  644,  640,  639,  635,  633,
+      203,  696,  201,  204,  201,  201,  201,  203,  631,  704,
+      203,  201,  203,  204,  203,  204,  205,  204,  628,  203,
 
-      196,  197,  196,  670,  195,  684,  686,  196,  662,  198,
-      655,  197,  600,  197,  695,  197,  654,  199,  197,  198,
-      197,  198,  696,  198,  653,  200,  648,  199,  198,  199,
-      672,  199,  200,  199,  687,  200,  199,  200,  201,  200,
-      646,  643,  635,  631,  200,  630,  202,  626,  201,  203,
-      201,  624,  201,  622,  619,  201,  202,  201,  202,  203,
-      202,  203,  609,  203,  695,  202,  203,  203,  203,  204,
-      204,  205,  696,  603,  205,  602,  593,  204,  590,  587,
-      204,  205,  204,  205,  204,  205,  206,  582,  570,  204,
-      205,  567,  207,  553,  549,  516,  206,  507,  206,  206,
+      705,  618,  204,  612,  206,  611,  205,  602,  205,  599,
+      205,  596,  207,  205,  206,  205,  206,  591,  206,  579,
+      208,  576,  207,  206,  207,  562,  207,  208,  207,  558,
+      208,  207,  208,  209,  208,  525,  516,  511,  478,  208,
+      477,  210,  458,  209,  211,  209,  416,  209,  351,  349,
+      209,  210,  209,  210,  211,  210,  211,  280,  211,  273,
+      210,  211,  211,  211,  212,  212,  213,  272,  271,  213,
+      270,  269,  212,  266,  263,  212,  213,  212,  213,  212,
+      213,  214,  202,  196,  212,  213,  189,  215,  187,  185,
+      183,  214,  181,  214,  214,  214,  176,  215,  216,  215,
 
-      206,  502,  207,  208,  207,  206,  207,  469,  468,  209,
-      449,  207,  209,  208,  208,  208,  407,  208,  342,  209,
-      210,  209,  208,  209,  340,  271,  211,  264,  209,  211,
-      210,  263,  210,  210,  210,  262,  211,  212,  211,  210,
-      211,  261,  258,  255,  194,  211,  188,  212,  213,  212,
-      181,  212,  179,  177,  212,  175,  212,  170,  213,  213,
-      213,  216,  213,  168,  163,  157,  106,  213,   98,  217,
-       95,  216,  218,  216,   92,  216,   90,   88,  216,  217,
-      216,  217,  218,  217,  218,  218,  218,  219,  217,   87,
-      220,  218,   86,  221,   83,   69,  221,  219,   66,  219,
+      214,  215,  174,  169,  217,  163,  215,  217,  216,  216,
+      216,  112,  216,  104,  217,  218,  217,  216,  217,  101,
+       98,  219,   96,  217,  219,  218,   94,  218,  218,  218,
+       93,  219,  220,  219,  218,  219,   92,   89,   84,   83,
+      219,   82,  220,  221,  220,   69,  220,   66,   62,  220,
+       61,  220,   58,  221,  221,  221,  224,  221,   57,   52,
+       31,   27,  221,   22,  225,   21,  224,  226,  224,   18,
+      224,   17,    0,  224,  225,  224,  225,  226,  225,  226,
+      226,  226,  227,  225,    0,  228,  226,    0,  229,    0,
+        0,  229,  227,    0,  227,  228,  227,  228,  229,  228,
 
-      220,  219,  220,  221,  220,  221,  219,  221,  220,  220,
-      222,  223,  221,   62,   61,   58,   57,   52,   31,  222,
-       27,  223,  224,  223,   22,  223,   21,   18,   17,  222,
-      223,  222,  224,  222,  224,  225,  224,    0,  222,    0,
-        0,  224,    0,  227,    0,  225,  227,  225,    0,  225,
-        0,    0,    0,  227,  225,  227,  228,  227,    0,  228,
-        0,    0,  227,    0,  229,    0,  228,  231,  228,    0,
-      228,  229,    0,    0,  229,  228,  229,  231,  229,  231,
-      232,  231,    0,  229,    0,  231,  231,    0,  233,    0,
-      232,    0,  232,    0,  232,    0,  234,    0,  233,  232,
+      229,  227,  229,  228,  228,  230,  231,  229,    0,    0,
+        0,    0,    0,    0,  230,    0,  231,  232,  231,    0,
+      231,    0,    0,    0,  230,  231,  230,  232,  230,  232,
+      233,  232,    0,  230,    0,    0,  232,    0,  235,    0,
+      233,  235,  233,    0,  233,    0,    0,    0,  235,  233,
+      235,  236,  235,    0,  236,    0,    0,  235,    0,  237,
+        0,  236,  239,  236,    0,  236,  237,    0,    0,  237,
+      236,  237,  239,  237,  239,  240,  239,    0,  237,    0,
+      239,  239,    0,  241,    0,  240,    0,  240,    0,  240,
+        0,  242,    0,  241,  240,  241,    0,  241,    0,  243,
 
-      233,    0,  233,    0,  235,  233,  234,  233,  234,    0,
-      234,    0,    0,  234,  235,  234,  235,  237,  235,  238,
-      238,    0,    0,  235,  235,    0,    0,  237,  239,  237,
-      238,  237,  238,    0,  238,    0,  237,    0,  239,  238,
-      239,  240,  239,    0,    0,    0,    0,  239,    0,  241,
-        0,  240,  241,  240,    0,  240,    0,  242,    0,  241,
-      240,  241,    0,  241,  242,  243,    0,  242,  241,  242,
-        0,  242,    0,    0,    0,  243,  242,  243,  244,  243,
-        0,    0,    0,  243,  243,    0,  245,    0,  244,    0,
-      244,    0,  244,    0,    0,  244,  245,  244,  245,  246,
+      241,  242,  241,  242,    0,  242,    0,    0,  242,  243,
+      242,  243,  245,  243,  246,  246,    0,    0,  243,  243,
+        0,    0,  245,  247,  245,  246,  245,  246,    0,  246,
+        0,  245,    0,  247,  246,  247,  248,  247,    0,    0,
+        0,    0,  247,    0,  249,    0,  248,  249,  248,    0,
+      248,    0,  250,    0,  249,  248,  249,    0,  249,  250,
+      251,    0,  250,  249,  250,    0,  250,    0,    0,    0,
+      251,  250,  251,  252,  251,    0,    0,    0,  251,  251,
+        0,  253,    0,  252,    0,  252,    0,  252,    0,    0,
+      252,  253,  252,  253,  254,  253,    0,  254,  253,    0,
 
-      245,    0,  246,  245,    0,  245,    0,  248,    0,  246,
-        0,  246,    0,  246,    0,    0,  250,  248,  246,  248,
-      248,  248,  248,  249,  250,    0,  248,  248,    0,    0,
-        0,    0,    0,  249,  250,  249,  250,  249,  250,  254,
-        0,  249,  249,  250,    0,  254,    0,    0,    0,  254,
-        0,  254,    0,  254,  256,  256,  256,  256,  254,    0,
-        0,    0,  257,  257,  257,  257,    0,    0,  256,  256,
-      256,  256,  256,  256,  256,  256,  257,  257,  257,  257,
-      257,  257,  257,  257,  272,  273,    0,    0,    0,    0,
-        0,    0,  273,    0,  272,  273,  272,  273,  272,  273,
+      253,    0,  256,    0,  254,    0,  254,    0,  254,    0,
+        0,  258,  256,  254,  256,  256,  256,  256,  257,  258,
+        0,  256,  256,    0,    0,    0,    0,    0,  257,  258,
+      257,  258,  257,  258,  262,    0,  257,  257,  258,    0,
+      262,    0,    0,    0,  262,    0,  262,    0,  262,  264,
+      264,  264,  264,  262,    0,    0,    0,  265,  265,  265,
+      265,    0,    0,  264,  264,  264,  264,  264,  264,  264,
+      264,  265,  265,  265,  265,  265,  265,  265,  265,  281,
+      282,    0,    0,    0,    0,    0,    0,  282,    0,  281,
+      282,  281,  282,  281,  282,  283,    0,    0,  281,  282,
 
-      274,    0,    0,  272,  273,    0,  275,    0,    0,    0,
-      274,  274,  274,    0,  274,    0,  275,  276,  275,  274,
-      275,    0,    0,  277,    0,  275,  277,  276,    0,  276,
-        0,  276,    0,  277,    0,  277,  276,  277,  278,  278,
-      279,  279,  277,    0,    0,    0,    0,    0,    0,  278,
-      279,  278,  279,  278,  279,  280,    0,    0,  278,  279,
-        0,  276,    0,  281,    0,  280,    0,  280,    0,  280,
-        0,  282,  280,  281,  280,  281,  281,  281,    0,    0,
-        0,  282,  281,  282,  284,  282,  283,  283,    0,  282,
-      282,    0,    0,    0,  284,  285,  284,  283,  284,  283,
+        0,  284,    0,    0,    0,  283,  283,  283,    0,  283,
+        0,  284,  285,  284,  283,  284,    0,    0,  286,    0,
+      284,  286,  285,    0,  285,    0,  285,    0,  286,    0,
+      286,  285,  286,  287,  287,  288,  288,  286,    0,    0,
+        0,    0,    0,    0,  287,  288,  287,  288,  287,  288,
+      289,    0,    0,  287,  288,    0,    0,  285,  290,    0,
+      289,    0,  289,    0,  289,    0,  291,  289,  290,  289,
+      290,  290,  290,    0,    0,    0,  291,  290,  291,  293,
+      291,  292,  292,    0,  291,  291,    0,    0,    0,  293,
+      294,  293,  292,  293,  292,    0,  292,    0,  293,    0,
 
-        0,  283,    0,  284,    0,  285,  283,  285,  286,  285,
-      286,  287,    0,  287,  285,    0,    0,    0,  286,    0,
-      286,  287,  286,  287,    0,  287,  288,  286,    0,  288,
-      287,    0,  289,    0,    0,    0,  288,    0,  288,    0,
-      288,    0,  289,  290,  289,  288,  289,    0,    0,  291,
-      290,  289,    0,  290,    0,  290,    0,  290,    0,  291,
-      292,  291,  290,  291,    0,  291,    0,    0,  291,    0,
-      292,    0,  292,    0,  292,  293,  292,    0,  293,  292,
-        0,  294,    0,    0,    0,  293,    0,  293,    0,  293,
-        0,  294,  297,  294,  293,  294,    0,    0,  298,    0,
+      294,  292,  294,  295,  294,  295,  296,    0,  296,  294,
+        0,    0,    0,  295,    0,  295,  296,  295,  296,    0,
+      296,  297,  295,    0,  297,  296,    0,  298,    0,    0,
+        0,  297,    0,  297,    0,  297,    0,  298,  299,  298,
+      297,  298,    0,    0,  300,  299,  298,    0,  299,    0,
+      299,    0,  299,    0,  300,  301,  300,  299,  300,    0,
+      300,    0,    0,  300,    0,  301,    0,  301,    0,  301,
+      302,  301,    0,  302,  301,    0,  303,    0,    0,    0,
+      302,    0,  302,    0,  302,    0,  303,  306,  303,  302,
+      303,    0,    0,  307,    0,  303,    0,  306,    0,  306,
 
-      294,    0,  297,    0,  297,    0,  297,    0,  298,    0,
-      298,  297,  298,  299,  300,    0,  298,  298,    0,    0,
-      299,    0,    0,  299,  300,  299,  300,  299,  300,  301,
-      300,    0,  299,  300,  302,  302,  297,    0,    0,  301,
-        0,  301,  304,  301,    0,  302,    0,  302,  301,  302,
-      303,  302,    0,  304,  302,  303,    0,    0,    0,    0,
-      303,  305,  303,  304,  303,  304,  303,  304,    0,  303,
-        0,  305,  304,  305,  306,  305,    0,    0,  305,    0,
-      305,    0,  308,  308,  306,  309,  306,    0,  306,    0,
-        0,    0,  308,  306,  308,  309,  308,  309,  310,  309,
+        0,  306,    0,  307,    0,  307,  306,  307,  308,  309,
+        0,  307,  307,    0,    0,  308,    0,    0,  308,  309,
+      308,  309,  308,  309,  310,  309,    0,  308,  309,  311,
+      311,    0,  306,    0,  310,    0,  310,  313,  310,    0,
+      311,    0,  311,  310,  311,  312,  311,    0,  313,  311,
+      312,    0,    0,    0,    0,  312,  314,  312,  313,  312,
+      313,  312,  313,    0,  312,    0,  314,  313,  314,  315,
+      314,    0,    0,  314,    0,  314,    0,  317,  317,  315,
+      318,  315,    0,  315,    0,    0,    0,  317,  315,  317,
+      318,  317,  318,  319,  318,    0,  317,  322,  318,  318,
 
-        0,  308,  313,  309,  309,    0,  312,    0,  310,  312,
-      310,  310,  310,    0,    0,    0,  312,  310,  312,  313,
-      312,    0,    0,    0,    0,  312,    0,  314,    0,  313,
-      314,  313,    0,  313,  315,  315,    0,  314,  313,  314,
-        0,  314,    0,  317,    0,  315,  314,  315,    0,  315,
-        0,  318,    0,  317,  315,  317,    0,  317,    0,    0,
-        0,  318,  317,  318,  319,  318,    0,  319,    0,  318,
-      318,    0,  320,    0,  319,  321,  319,    0,  319,    0,
-        0,    0,  320,  319,  320,  321,  320,  321,    0,  321,
-      323,  320,  322,  322,  321,    0,  324,    0,    0,    0,
+        0,  321,    0,  319,  321,  319,  319,  319,    0,    0,
+        0,  321,  319,  321,  322,  321,    0,    0,    0,    0,
+      321,    0,  323,    0,  322,  323,  322,    0,  322,  324,
+      324,    0,  323,  322,  323,    0,  323,    0,  326,    0,
+      324,  323,  324,    0,  324,    0,  327,    0,  326,  324,
+      326,    0,  326,    0,    0,    0,  327,  326,  327,  328,
+      327,    0,  328,    0,  327,  327,    0,  329,    0,  328,
+      330,  328,    0,  328,    0,    0,    0,  329,  328,  329,
+      330,  329,  330,    0,  330,  332,  329,  331,  331,  330,
+        0,  333,    0,    0,    0,  332,    0,  332,  331,  332,
 
-      323,    0,  323,  322,  323,  322,  324,  322,  324,  323,
-      324,  325,  322,    0,  327,  324,    0,  328,    0,    0,
-        0,  325,    0,  325,  327,  325,  327,  328,  327,  328,
-      325,  328,  329,  327,  323,  329,  328,    0,  330,    0,
-        0,    0,  329,    0,  329,    0,  329,    0,  330,  331,
-      330,  329,  330,    0,    0,  335,    0,  330,    0,  331,
-        0,  331,    0,  331,    0,  335,  331,  335,  331,  335,
-        0,    0,    0,  330,  335,  336,  336,  336,  336,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  336,
-      336,  336,  336,  336,  336,  336,  336,  337,  337,  337,
+      331,  333,  331,  333,  332,  333,  334,  331,    0,  336,
+      333,    0,  337,    0,    0,    0,  334,    0,  334,  336,
+      334,  336,  337,  336,  337,  334,  337,    0,  336,  338,
+      332,  337,  338,    0,    0,  339,    0,    0,    0,  338,
+        0,  338,    0,  338,    0,  339,  340,  339,  338,  339,
+        0,    0,    0,    0,  339,    0,  340,    0,  340,    0,
+      340,    0,  344,  340,    0,  340,    0,    0,    0,    0,
+        0,  339,  344,    0,  344,    0,  344,  345,  345,  345,
+      345,  344,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  345,  345,  345,  345,  345,  345,  345,  345,  346,
 
-      337,    0,    0,    0,    0,    0,    0,  337,    0,    0,
-        0,  337,  337,  337,  337,  337,  337,  337,  337,  338,
-      338,  338,  338,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  338,  338,  338,  338,  338,  338,  338,
-      338,  339,    0,  343,    0,  339,  339,  339,  339,  339,
-      339,  339,  339,  343,    0,  343,    0,  343,  344,  344,
-        0,  343,  343,    0,    0,    0,    0,    0,  344,    0,
-      344,  346,  344,  345,  345,    0,  337,  344,    0,    0,
-        0,  346,    0,  346,  345,  346,  345,    0,  345,    0,
-      346,  348,  348,  345,    0,  349,  349,    0,  350,    0,
+      346,  346,  346,    0,    0,    0,    0,    0,    0,  346,
+        0,    0,    0,  346,  346,  346,  346,  346,  346,  346,
+      346,  347,  347,  347,  347,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  347,  347,  347,  347,  347,
+      347,  347,  347,  348,    0,  352,  355,  348,  348,  348,
+      348,  348,  348,  348,  348,  352,  355,  352,  355,  352,
+      355,  353,  353,  352,  352,  355,    0,    0,    0,    0,
+        0,  353,    0,  353,    0,  353,  354,  354,    0,  346,
+      353,    0,  357,  357,    0,    0,    0,  354,    0,  354,
+        0,  354,    0,  357,    0,  357,  354,  357,  358,  358,
 
-        0,  350,  348,    0,  348,  349,  348,  349,  350,  349,
-      350,  348,  350,  351,  349,    0,  352,  350,    0,    0,
-        0,    0,    0,  351,  353,  351,  352,  351,  352,    0,
-      352,    0,  351,    0,  353,  352,  353,  354,  353,    0,
-      353,    0,    0,  353,  354,  355,    0,  354,    0,  354,
-        0,  354,    0,    0,    0,  355,  354,  355,  356,  355,
-        0,  356,    0,    0,  355,  356,    0,    0,  356,  357,
-      356,  357,  356,    0,    0,  358,    0,  356,  358,  357,
-        0,  357,  358,  357,    0,  358,  359,  358,  357,  358,
-        0,    0,    0,    0,  358,    0,  359,  360,  359,    0,
+        0,  359,  357,    0,  359,    0,    0,    0,  358,  360,
+      358,  359,  358,  359,    0,  359,    0,  358,    0,  360,
+      359,  360,  361,  360,    0,    0,    0,    0,  360,    0,
+      362,    0,  361,    0,  361,    0,  361,    0,  363,    0,
+      362,  361,  362,    0,  362,  363,  362,    0,  363,  362,
+      363,  364,  363,    0,    0,    0,    0,  363,    0,  365,
+        0,  364,  365,  364,    0,  364,  365,    0,    0,  365,
+      364,  365,  366,  365,  366,    0,    0,    0,  365,    0,
+      367,    0,  366,  367,  366,    0,  366,  367,  368,    0,
+      367,  366,  367,    0,  367,    0,  369,    0,  368,  367,
 
-      359,    0,  359,    0,    0,  359,    0,  360,    0,  360,
-        0,  360,  361,  361,    0,  360,  360,    0,  362,    0,
-        0,    0,  361,    0,  361,    0,  361,    0,  362,  363,
-      362,  361,  362,    0,    0,  364,  362,  362,    0,  363,
-        0,  363,    0,  363,    0,  364,  363,  364,  363,  364,
-      365,  369,    0,    0,  364,    0,    0,    0,  369,    0,
-      365,  369,  365,  369,  365,  369,    0,    0,  371,  365,
-      369,  370,  370,    0,  370,    0,    0,    0,  371,    0,
-      371,  370,  371,  370,    0,  370,  371,  371,  373,  372,
-      370,  372,    0,    0,    0,    0,    0,    0,  373,  372,
+      368,    0,  368,    0,  368,    0,  369,  368,  369,    0,
+      369,  370,  370,    0,  369,  369,    0,  371,    0,    0,
+        0,  370,    0,  370,    0,  370,    0,  371,  372,  371,
+      370,  371,    0,    0,  373,  371,  371,    0,  372,    0,
+      372,    0,  372,    0,  373,  372,  373,  372,  373,  374,
+      378,    0,    0,  373,    0,    0,    0,  378,    0,  374,
+      378,  374,  378,  374,  378,    0,    0,  380,  374,  378,
+      379,  379,    0,  379,    0,    0,    0,  380,    0,  380,
+      379,  380,  379,    0,  379,  380,  380,  382,  381,  379,
+      381,    0,    0,    0,    0,    0,    0,  382,  381,  382,
 
-      373,  372,  373,  372,  374,    0,    0,  373,  372,    0,
-      375,    0,    0,  375,  374,    0,  374,    0,  374,    0,
-      375,  376,  375,  374,  375,  377,    0,    0,  378,  375,
-        0,  376,    0,  376,  377,  376,    0,    0,  376,    0,
-      376,    0,  380,    0,  377,  378,  377,    0,  377,    0,
-        0,    0,  380,  377,  380,  378,  380,  378,  381,  378,
-      380,  380,    0,    0,  378,    0,  382,    0,  381,    0,
-      381,    0,  381,    0,  384,    0,  382,  381,  382,    0,
-      382,    0,  386,    0,  384,  382,  384,    0,  384,    0,
-      384,    0,  386,  384,  386,  387,  386,    0,    0,    0,
+      381,  382,  381,  383,    0,    0,  382,  381,    0,  384,
+        0,    0,  384,  383,    0,  383,    0,  383,    0,  384,
+      385,  384,  383,  384,  386,    0,    0,  387,  384,    0,
+      385,    0,  385,  386,  385,    0,    0,  385,    0,  385,
+        0,  389,    0,  386,  387,  386,    0,  386,    0,    0,
+        0,  389,  386,  389,  387,  389,  387,  390,  387,  389,
+      389,    0,    0,  387,    0,  391,    0,  390,    0,  390,
+        0,  390,    0,  393,    0,  391,  390,  391,    0,  391,
+        0,  395,    0,  393,  391,  393,    0,  393,    0,  393,
+        0,  395,  393,  395,  396,  395,    0,    0,    0,    0,
 
-        0,  386,    0,    0,    0,  387,    0,  387,  389,  387,
-        0,  390,    0,  387,  387,  389,    0,    0,  389,  391,
-      389,  390,  389,  390,  391,  390,    0,  389,    0,  391,
-      390,  391,  392,  391,    0,    0,    0,    0,  391,    0,
-        0,    0,  392,  395,  392,    0,  392,    0,    0,  396,
-        0,  392,  396,  395,  392,  395,    0,  395,    0,  396,
-      397,  396,  395,  396,    0,    0,    0,    0,  396,    0,
-      397,  399,  397,    0,  397,    0,  397,    0,    0,  397,
-        0,  399,    0,  399,    0,  399,  404,  404,  404,  404,
-      399,    0,    0,    0,    0,    0,    0,    0,  408,    0,
+      395,    0,    0,    0,  396,    0,  396,  398,  396,    0,
+      399,    0,  396,  396,  398,    0,    0,  398,  400,  398,
+      399,  398,  399,  400,  399,    0,  398,    0,  400,  399,
+      400,  401,  400,    0,    0,    0,    0,  400,    0,    0,
+        0,  401,  404,  401,    0,  401,    0,    0,  405,    0,
+      401,  405,  404,  401,  404,    0,  404,    0,  405,  406,
+      405,  404,  405,    0,    0,    0,    0,  405,    0,  406,
+      408,  406,    0,  406,    0,  406,    0,    0,  406,    0,
+      408,    0,  408,    0,  408,  413,  413,  413,  413,  408,
+        0,    0,    0,    0,    0,    0,    0,  417,    0,  413,
 
-      404,  404,  404,  404,  404,  404,  404,  404,  408,    0,
-      408,  410,  408,  409,  409,  399,    0,  408,    0,    0,
-        0,  410,  412,  410,  409,  410,  409,    0,  409,  410,
-      410,    0,  412,  409,  412,  413,  412,    0,  414,    0,
-        0,  412,    0,    0,    0,  413,    0,  413,  414,  413,
-      414,    0,  414,  413,  413,  415,    0,  414,  415,    0,
-      416,  416,    0,    0,    0,  415,    0,  415,    0,  415,
-        0,  416,  417,  416,  415,  416,    0,    0,  418,    0,
-      416,    0,  417,    0,  417,    0,  417,    0,  418,    0,
-      418,  417,  418,  419,    0,  419,  418,  418,    0,  420,
+      413,  413,  413,  413,  413,  413,  413,  417,    0,  417,
+      419,  417,  418,  418,    0,  408,  417,    0,    0,    0,
+      419,  421,  419,  418,  419,  418,    0,  418,  419,  419,
+        0,  421,  418,  421,  422,  421,    0,  423,    0,    0,
+      421,    0,    0,    0,  422,    0,  422,  423,  422,  423,
+        0,  423,  422,  422,  424,    0,  423,  424,    0,  425,
+      425,    0,    0,    0,  424,    0,  424,    0,  424,    0,
+      425,  426,  425,  424,  425,    0,    0,  427,    0,  425,
+        0,  426,    0,  426,    0,  426,    0,  427,    0,  427,
+      426,  427,  428,    0,  428,  427,  427,    0,  429,    0,
 
-        0,    0,    0,  419,    0,  419,    0,  419,    0,  420,
-        0,  420,  419,  420,    0,    0,  421,  420,  420,  421,
-        0,    0,  422,    0,  422,    0,  421,    0,  421,    0,
-      421,    0,  422,  423,  422,  421,  422,    0,  424,  424,
-        0,  422,    0,  423,    0,  423,    0,  423,    0,  424,
-      425,  424,  423,  424,    0,    0,  426,    0,  424,    0,
-      425,    0,  425,  426,  425,    0,  426,  427,  426,  425,
-      426,    0,    0,  428,    0,  426,    0,  427,    0,  427,
-      428,  427,    0,  428,  427,  428,  427,  428,  429,  429,
-      433,    0,  428,    0,  433,    0,    0,    0,    0,  429,
+        0,    0,  428,    0,  428,    0,  428,    0,  429,    0,
+      429,  428,  429,    0,    0,  430,  429,  429,  430,    0,
+        0,  431,    0,  431,    0,  430,    0,  430,    0,  430,
+        0,  431,  432,  431,  430,  431,    0,  433,  433,    0,
+      431,    0,  432,    0,  432,    0,  432,    0,  433,  434,
+      433,  432,  433,    0,    0,  435,    0,  433,    0,  434,
+        0,  434,  435,  434,    0,  435,  436,  435,  434,  435,
+        0,    0,  437,    0,  435,    0,  436,    0,  436,  437,
+      436,    0,  437,  436,  437,  436,  437,  438,  438,  442,
+        0,  437,    0,  442,    0,    0,    0,    0,  438,  442,
 
-      433,  429,  433,  429,  433,  434,    0,    0,  429,  433,
-        0,  435,  434,  435,    0,  434,    0,  434,    0,  434,
-        0,  435,  436,  435,  434,  435,    0,    0,  437,    0,
-      435,  437,  436,    0,  436,    0,  436,    0,  437,  436,
-      437,  436,  437,  438,  438,    0,    0,  437,    0,  439,
-      439,    0,    0,  438,    0,  438,    0,  438,    0,  439,
-      440,  439,  438,  439,    0,    0,    0,    0,  439,    0,
-      440,    0,  440,    0,  440,  441,  440,    0,  441,  440,
-        0,  442,    0,    0,    0,  441,    0,  441,    0,  441,
-        0,  442,  445,  442,  441,  442,    0,    0,  442,    0,
+      438,  442,  438,  442,  443,    0,    0,  438,  442,    0,
+      444,  443,  444,    0,  443,    0,  443,    0,  443,    0,
+      444,  445,  444,  443,  444,    0,    0,  446,    0,  444,
+      446,  445,    0,  445,    0,  445,    0,  446,  445,  446,
+      445,  446,  447,  447,    0,    0,  446,    0,  448,  448,
+        0,    0,  447,    0,  447,    0,  447,    0,  448,  449,
+      448,  447,  448,    0,    0,    0,    0,  448,    0,  449,
+        0,  449,    0,  449,  450,  449,    0,  450,  449,    0,
+      451,    0,    0,    0,  450,    0,  450,    0,  450,    0,
+      451,  454,  451,  450,  451,    0,    0,  451,    0,  451,
 
-      442,    0,  445,    0,  445,  448,  445,  446,  446,    0,
-        0,  445,    0,    0,    0,  448,  450,  448,  446,  448,
-      446,    0,  446,    0,  448,    0,  450,  446,  450,  451,
-      450,    0,  451,    0,  450,  450,    0,  453,    0,  451,
-        0,  451,    0,  451,    0,    0,    0,  453,  451,  453,
-        0,  453,  454,  454,    0,  455,  453,  453,  456,    0,
-        0,    0,  454,    0,  454,  455,  454,  455,  456,  455,
-      456,  454,  456,  459,  455,    0,  460,  456,    0,    0,
-        0,    0,    0,  459,    0,  459,  460,  459,  460,    0,
-      460,    0,  459,  460,    0,  460,  466,  466,  466,  466,
+        0,  454,    0,  454,  457,  454,  455,  455,    0,    0,
+      454,    0,    0,    0,  457,  459,  457,  455,  457,  455,
+        0,  455,    0,  457,    0,  459,  455,  459,  460,  459,
+        0,  460,    0,  459,  459,    0,  462,    0,  460,    0,
+      460,    0,  460,    0,    0,    0,  462,  460,  462,    0,
+      462,  463,  463,    0,  464,  462,  462,  465,    0,    0,
+        0,  463,    0,  463,  464,  463,  464,  465,  464,  465,
+      463,  465,  468,  464,    0,  469,  465,    0,    0,    0,
+        0,    0,  468,    0,  468,  469,  468,  469,    0,  469,
+        0,  468,  469,    0,  469,  475,  475,  475,  475,    0,
 
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      466,  466,  466,  466,  466,  466,  466,  466,  467,    0,
-      470,    0,  467,  467,  467,  467,  467,  467,  467,  467,
-      470,    0,  470,  471,  470,    0,  473,    0,  470,  470,
-      471,    0,    0,  471,    0,  471,  473,  471,  473,    0,
-      473,  474,  471,    0,  474,  473,    0,  475,    0,    0,
-        0,  474,    0,  474,    0,  474,    0,  475,  476,  475,
-      474,  475,    0,    0,  477,  476,  475,    0,  476,    0,
-      476,  477,  476,    0,  477,  478,  477,  476,  477,    0,
-        0,  479,    0,  477,    0,  478,    0,  478,    0,  478,
-
-        0,  479,  480,  479,  478,  479,    0,    0,    0,  480,
-      479,    0,  480,  481,  480,  481,  480,    0,    0,  482,
-        0,  480,    0,  481,    0,  481,    0,  481,    0,  482,
-      483,  482,  481,  482,    0,  483,  484,    0,  482,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  475,
+      475,  475,  475,  475,  475,  475,  475,  476,    0,  479,
+        0,  476,  476,  476,  476,  476,  476,  476,  476,  479,
+        0,  479,  480,  479,    0,  482,    0,  479,  479,  480,
+        0,    0,  480,    0,  480,  482,  480,  482,    0,  482,
+      483,  480,    0,  483,  482,    0,  484,    0,    0,    0,
       483,    0,  483,    0,  483,    0,  484,  485,  484,  483,
-      484,    0,    0,    0,  484,  484,    0,  485,  486,  485,
-        0,  485,    0,    0,  487,  485,  485,    0,  486,    0,
-      486,    0,  486,    0,  487,  488,  487,  486,  487,    0,
-        0,  492,    0,  487,    0,  488,    0,  488,  492,  488,
-        0,  492,  493,  492,  488,  492,    0,    0,    0,    0,
+      484,    0,    0,  486,  485,  484,    0,  485,    0,  485,
+      486,  485,    0,  486,  487,  486,  485,  486,    0,    0,
+      488,    0,  486,    0,  487,    0,  487,    0,  487,    0,
 
-      492,    0,  493,  494,  493,    0,  493,    0,    0,  495,
-      493,  493,    0,  494,    0,  494,    0,  494,    0,  495,
-      496,  495,  494,  495,    0,    0,  497,    0,  495,  497,
-      496,    0,  496,    0,  496,    0,  497,  496,  497,  496,
-      497,  498,  499,    0,    0,  497,    0,    0,    0,    0,
-        0,  498,  499,  498,  499,  498,  499,  500,  500,  498,
-      498,  499,    0,  501,    0,    0,    0,  500,    0,  500,
-        0,  500,    0,  501,  504,  501,  500,  501,    0,    0,
-      506,    0,  501,    0,  504,    0,  504,    0,  504,    0,
-      506,  508,  506,  504,  506,    0,    0,    0,    0,  506,
+      488,  489,  488,  487,  488,    0,    0,    0,  489,  488,
+        0,  489,  490,  489,  490,  489,    0,    0,  491,    0,
+      489,    0,  490,    0,  490,    0,  490,    0,  491,  492,
+      491,  490,  491,    0,  492,  493,    0,  491,    0,  492,
+        0,  492,    0,  492,    0,  493,  494,  493,  492,  493,
+        0,    0,    0,  493,  493,    0,  494,  495,  494,    0,
+      494,    0,    0,  496,  494,  494,    0,  495,    0,  495,
+        0,  495,    0,  496,  497,  496,  495,  496,    0,    0,
+      501,    0,  496,    0,  497,    0,  497,  501,  497,    0,
+      501,  502,  501,  497,  501,    0,    0,    0,    0,  501,
 
-        0,  508,  509,  508,    0,  508,    0,  501,  511,    0,
-      508,  511,  509,    0,  509,    0,  509,    0,  511,    0,
-      511,  509,  511,  512,    0,    0,  512,  511,  515,  515,
-        0,    0,    0,  512,    0,  512,    0,  512,    0,  515,
-        0,  515,  512,  515,  521,  521,  521,  521,  515,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  521,  521,
-      521,  521,  521,  521,  521,  521,  524,  525,  525,    0,
-        0,    0,    0,  524,    0,    0,  524,  525,  524,  525,
-      524,  525,  527,    0,    0,  524,  525,    0,    0,    0,
-      528,    0,  527,  529,  527,    0,  527,    0,  527,    0,
+        0,  502,  503,  502,    0,  502,    0,    0,  504,  502,
+      502,    0,  503,    0,  503,    0,  503,    0,  504,  505,
+      504,  503,  504,    0,    0,  506,    0,  504,  506,  505,
+        0,  505,    0,  505,    0,  506,  505,  506,  505,  506,
+      507,  508,    0,    0,  506,    0,    0,    0,    0,    0,
+      507,  508,  507,  508,  507,  508,  509,  509,  507,  507,
+      508,    0,  510,    0,    0,    0,  509,    0,  509,    0,
+      509,    0,  510,  513,  510,  509,  510,    0,    0,  515,
+        0,  510,    0,  513,    0,  513,    0,  513,    0,  515,
+      517,  515,  513,  515,    0,    0,  518,    0,  515,    0,
 
-      528,  527,  528,  529,  528,  529,  530,  529,  528,  528,
-        0,    0,  529,  533,  531,    0,  530,    0,  530,    0,
-      530,    0,  532,    0,  531,  530,  531,  531,  531,    0,
-      533,    0,  532,  531,  532,    0,  532,    0,    0,    0,
-      533,  532,  533,  534,  533,    0,  534,    0,    0,  533,
-        0,  535,    0,  534,    0,  534,    0,  534,    0,  536,
-        0,  535,  534,  535,    0,  535,  536,  537,    0,  536,
-      535,  536,    0,  536,    0,    0,    0,  537,  536,  537,
-      542,  537,    0,  542,    0,    0,  537,    0,  543,    0,
-      542,  544,  542,    0,  542,    0,    0,    0,  543,  542,
+      517,    0,  517,    0,  517,    0,  518,  510,  518,  517,
+      518,  520,    0,    0,  520,  518,    0,  521,    0,    0,
+      521,  520,    0,  520,    0,  520,    0,  521,    0,  521,
+      520,  521,  524,  524,    0,    0,  521,    0,    0,  530,
+      530,  530,  530,  524,    0,  524,    0,  524,    0,    0,
+        0,    0,  524,  530,  530,  530,  530,  530,  530,  530,
+      530,  533,  534,  534,    0,    0,    0,    0,  533,    0,
+        0,  533,  534,  533,  534,  533,  534,  536,    0,    0,
+      533,  534,    0,    0,    0,  537,    0,  536,  538,  536,
+        0,  536,    0,  536,    0,  537,  536,  537,  538,  537,
 
-      543,  544,  543,  544,  545,  544,    0,  543,    0,    0,
-      544,    0,  546,    0,  545,  547,  545,    0,  545,  546,
-        0,    0,  546,  545,  546,  547,  546,  547,  551,  547,
-        0,  546,  555,  547,  547,    0,  556,    0,  551,    0,
-      551,    0,  551,    0,    0,    0,  556,  551,  556,  555,
-      556,    0,  559,    0,    0,  556,    0,    0,    0,  555,
-        0,  555,  559,  555,  559,    0,  559,    0,  555,    0,
-        0,  559,  564,  564,  564,  564,    0,    0,    0,    0,
-        0,    0,    0,    0,  568,    0,  564,  564,  564,  564,
-      564,  564,  564,  564,  568,  569,  568,  568,  568,    0,
+      538,  539,  538,  537,  537,    0,    0,  538,  542,  540,
+        0,  539,    0,  539,    0,  539,    0,  541,    0,  540,
+      539,  540,  540,  540,    0,  542,    0,  541,  540,  541,
+        0,  541,    0,    0,    0,  542,  541,  542,  543,  542,
+        0,  543,    0,    0,  542,    0,  544,    0,  543,    0,
+      543,    0,  543,    0,  545,    0,  544,  543,  544,    0,
+      544,  545,  546,    0,  545,  544,  545,    0,  545,    0,
+        0,    0,  546,  545,  546,  551,  546,    0,  551,    0,
+        0,  546,    0,  552,    0,  551,  553,  551,    0,  551,
+        0,    0,    0,  552,  551,  552,  553,  552,  553,  554,
 
-        0,  571,    0,  568,    0,  569,    0,  569,    0,  569,
-        0,  571,  572,  571,  569,  571,    0,    0,  573,    0,
-      571,  573,  572,    0,  572,    0,  572,    0,  573,  572,
-      573,  572,  573,  574,  575,    0,    0,  573,  574,    0,
-        0,    0,    0,  574,  575,  574,  575,  574,  575,  577,
-      578,  577,  574,  575,    0,    0,    0,    0,    0,  577,
-      578,  577,  578,  577,  578,  583,    0,    0,  577,  578,
-        0,    0,    0,  584,    0,  583,    0,  583,    0,  583,
-        0,  583,    0,  584,  583,  584,  584,  584,  585,  595,
-        0,    0,  584,    0,    0,  585,    0,    0,  585,  595,
+      553,    0,  552,    0,    0,  553,    0,  555,    0,  554,
+      556,  554,    0,  554,  555,    0,    0,  555,  554,  555,
+      556,  555,  556,  560,  556,    0,  555,  564,  556,  556,
+        0,  565,    0,  560,    0,  560,    0,  560,    0,    0,
+        0,  565,  560,  565,  564,  565,    0,  568,    0,    0,
+      565,    0,    0,    0,  564,    0,  564,  568,  564,  568,
+        0,  568,    0,  564,    0,    0,  568,  573,  573,  573,
+      573,    0,    0,    0,    0,    0,    0,    0,    0,  577,
+        0,  573,  573,  573,  573,  573,  573,  573,  573,  577,
+      578,  577,  577,  577,    0,    0,  580,    0,  577,    0,
 
-      585,  595,  585,  595,  604,  605,    0,  585,  595,    0,
-        0,    0,    0,    0,  604,  605,  604,  605,  604,  605,
-      606,  607,  606,  604,  605,    0,    0,    0,    0,    0,
-      606,  607,  606,  607,  606,  607,  608,  610,    0,  606,
-      607,    0,    0,    0,    0,    0,  608,  610,  608,  610,
-      608,  610,  611,  608,    0,  608,  610,    0,  615,  611,
-        0,    0,  611,    0,  611,    0,  611,    0,  615,  616,
-      615,  611,  615,    0,    0,    0,    0,  615,    0,  616,
-      617,  616,    0,  616,    0,    0,  632,    0,  616,    0,
-      617,    0,  617,  617,  617,    0,  632,  633,  632,  617,
+      578,    0,  578,    0,  578,    0,  580,  581,  580,  578,
+      580,    0,    0,  582,    0,  580,  582,  581,    0,  581,
+        0,  581,    0,  582,  581,  582,  581,  582,  583,  584,
+        0,    0,  582,  583,    0,    0,    0,    0,  583,  584,
+      583,  584,  583,  584,  586,  587,  586,  583,  584,    0,
+        0,    0,    0,    0,  586,  587,  586,  587,  586,  587,
+      592,    0,    0,  586,  587,    0,    0,    0,  593,    0,
+      592,    0,  592,    0,  592,    0,  592,    0,  593,  592,
+      593,  593,  593,  594,  604,    0,    0,  593,    0,    0,
+      594,    0,    0,  594,  604,  594,  604,  594,  604,  613,
 
-      632,    0,    0,  634,    0,  632,    0,  633,    0,  633,
-        0,  633,    0,  634,  636,  634,  633,  634,    0,    0,
-        0,    0,  634,    0,  636,  640,  636,    0,  636,    0,
-        0,  641,  636,  636,    0,  640,    0,  640,    0,  640,
-        0,  641,  640,  641,  640,  641,  656,  660,    0,    0,
-      641,    0,    0,    0,    0,    0,  656,  660,  656,  660,
-      656,  660,  661,  676,    0,  656,  660,    0,    0,  656,
-        0,    0,  661,  676,  661,  676,  661,  676,    0,    0,
-        0,  661,  676,  726,  726,  726,  726,  726,  726,  726,
-      726,  726,  726,  726,  726,  726,  726,  727,  727,  727,
+      614,    0,  594,  604,    0,    0,    0,    0,    0,  613,
+      614,  613,  614,  613,  614,  615,  616,  615,  613,  614,
+        0,    0,    0,    0,    0,  615,  616,  615,  616,  615,
+      616,  617,  619,    0,  615,  616,    0,    0,    0,    0,
+        0,  617,  619,  617,  619,  617,  619,  620,  617,    0,
+      617,  619,    0,  624,  620,    0,    0,  620,    0,  620,
+        0,  620,    0,  624,  625,  624,  620,  624,    0,    0,
+        0,    0,  624,    0,  625,  626,  625,    0,  625,    0,
+        0,  641,    0,  625,    0,  626,    0,  626,  626,  626,
+        0,  641,  642,  641,  626,  641,    0,    0,  643,    0,
 
-      727,  727,  727,  727,  727,  727,  727,  727,  727,  727,
-      727,  728,  728,  728,  728,  728,  728,  728,  728,  728,
-      728,  728,  728,  728,  728,  729,  729,  729,  729,  729,
-      729,  729,  729,  729,  729,  729,  729,  729,  729,  730,
-      730,  730,  730,  730,  730,  730,  730,  730,  730,  730,
-      730,  730,  730,  731,  731,  731,  731,  731,  731,  731,
-      731,  731,  731,  731,  731,  731,  731,  732,  732,  732,
-      732,    0,  732,  732,  732,  732,  732,  732,  732,  732,
-      732,  733,  733,  733,    0,    0,  733,    0,  733,    0,
-      733,  734,  734,    0,  734,  734,  735,  735,    0,    0,
+      641,    0,  642,    0,  642,    0,  642,    0,  643,  645,
+      643,  642,  643,    0,    0,    0,    0,  643,    0,  645,
+      649,  645,    0,  645,    0,    0,  650,  645,  645,    0,
+      649,    0,  649,    0,  649,    0,  650,  649,  650,  649,
+      650,  665,  669,    0,    0,  650,    0,    0,    0,    0,
+        0,  665,  669,  665,  669,  665,  669,  670,  685,    0,
+      665,  669,    0,    0,  665,    0,    0,  670,  685,  670,
+      685,  670,  685,    0,    0,    0,  670,  685,  735,  735,
+      735,  735,  735,  735,  735,  735,  735,  735,  735,  735,
+      735,  736,  736,  736,  736,  736,  736,  736,  736,  736,
 
-      735,  735,  735,    0,  735,  735,  735,  735,  735,  735,
-      736,  736,  736,  736,    0,  736,  736,  736,  736,  736,
       736,  736,  736,  736,  737,  737,  737,  737,  737,  737,
-      737,  737,  737,    0,  737,  737,  738,    0,    0,    0,
-      738,  738,  738,  738,  738,  738,  738,  738,  739,    0,
-        0,    0,  739,  739,  739,  739,  739,  739,  739,  739,
-      740,    0,    0,    0,  740,    0,  740,  740,  740,  740,
-      740,  740,  741,  741,    0,  741,  741,  742,  742,    0,
-      742,  742,  743,    0,  743,  743,  744,  744,    0,  744,
-      744,  745,    0,  745,  745,  746,    0,  746,  746,  747,
+      737,  737,  737,  737,  737,  737,  737,  738,  738,  738,
+      738,  738,  738,  738,  738,  738,  738,  738,  738,  738,
+      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
+      739,  739,  739,  740,  740,  740,  740,    0,  740,  740,
+      740,  740,  740,  740,  740,  740,  741,  741,  741,    0,
+      741,    0,  741,    0,  741,  742,  742,    0,  742,  742,
+      743,  743,    0,    0,  743,  743,    0,  743,  743,  743,
+      743,  743,  743,  744,  744,  744,  744,    0,  744,  744,
+      744,  744,  744,  744,  744,  744,  745,  745,  745,  745,
 
-        0,  747,  747,  748,  748,  748,  748,  748,  748,  748,
-      748,  748,  748,  748,  748,  748,  748,  749,  749,    0,
-      749,  749,  750,  750,    0,  750,  750,  750,  750,  750,
-      750,  750,  750,  750,  750,  750,  751,  751,  751,    0,
-        0,    0,    0,  751,    0,    0,    0,    0,  751,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
+      745,  745,  745,  745,    0,  745,  745,  746,    0,    0,
+        0,  746,  746,  746,  746,  746,  746,  746,  747,    0,
+        0,    0,  747,  747,  747,  747,  747,  747,  747,  748,
+      748,    0,  748,  748,  749,  749,    0,  749,  749,  750,
+      750,    0,  750,  750,  751,    0,  751,  751,  752,  752,
+        0,  752,  752,  753,    0,  753,  753,  754,    0,  754,
+      754,  755,    0,  755,  755,  756,    0,  756,  756,  757,
+      757,  757,  757,  757,  757,  757,  757,  757,  757,  757,
+      757,  757,  758,  758,    0,  758,  758,  759,  759,    0,
+      759,  759,  759,  759,  759,  759,  759,  759,  759,  759,
 
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725
+      760,  760,  760,    0,    0,    0,  760,    0,    0,    0,
+        0,  760,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734
+
     } ;
 
 extern int yy_flex_debug;
 int yy_flex_debug = 1;
 
-static yyconst short int yy_rule_linenum[133] =
+static yyconst short int yy_rule_linenum[137] =
     {   0,
        94,   95,   97,  100,  102,  105,  107,  108,  109,  112,
       114,  115,  116,  128,  135,  142,  148,  157,  165,  173,
@@ -1759,8 +1776,8 @@
 
       328,  329,  330,  331,  332,  333,  334,  335,  336,  337,
       342,  343,  348,  349,  350,  353,  358,  364,  372,  382,
-      387,  389,  390,  394,  400,  406,  414,  417,  442,  486,
-      488,  499
+      387,  389,  390,  394,  399,  404,  410,  411,  413,  419,
+      432,  435,  460,  504,  506,  517
     } ;
 
 static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
@@ -1866,7 +1883,7 @@
 
 /* Newline */
 /* White-space */
-#line 1870 "asn1p_l.c"
+#line 1887 "asn1p_l.c"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -2020,7 +2037,7 @@
 #line 92 "asn1p_l.l"
 
 
-#line 2024 "asn1p_l.c"
+#line 2041 "asn1p_l.c"
 
 	if ( yy_init )
 		{
@@ -2068,14 +2085,14 @@
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 726 )
+				if ( yy_current_state >= 735 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			*yy_state_ptr++ = yy_current_state;
 			++yy_cp;
 			}
-		while ( yy_base[yy_current_state] != 4350 );
+		while ( yy_base[yy_current_state] != 4413 );
 
 yy_find_action:
 		yy_current_state = *--yy_state_ptr;
@@ -2112,13 +2129,13 @@
 			{
 			if ( yy_act == 0 )
 				fprintf( stderr, "--scanner backing up\n" );
-			else if ( yy_act < 133 )
+			else if ( yy_act < 137 )
 				fprintf( stderr, "--accepting rule at line %d (\"%s\")\n",
 				         yy_rule_linenum[yy_act], yytext );
-			else if ( yy_act == 133 )
+			else if ( yy_act == 137 )
 				fprintf( stderr, "--accepting default rule (\"%s\")\n",
 				         yytext );
-			else if ( yy_act == 134 )
+			else if ( yy_act == 138 )
 				fprintf( stderr, "--(end of buffer or a NUL)\n" );
 			else
 				fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -2892,37 +2909,68 @@
 YY_RULE_SETUP
 #line 394 "asn1p_l.l"
 {
-			asn1p_lval.tv_opaque.buf = strdup(yytext);
-			asn1p_lval.tv_opaque.len = yyleng;
-			return TOK_opaque;
+				asn1p_lval.tv_str = strdup(yytext);
+				return TOK_Literal;
 			}
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 400 "asn1p_l.l"
+#line 399 "asn1p_l.l"
+{
+				asn1p_lval.tv_str = strdup(yytext);
+				return TOK_Literal;
+			}
+	YY_BREAK
+case 126:
+YY_RULE_SETUP
+#line 404 "asn1p_l.l"
+{
+				yy_push_state(with_syntax);
+				asn1p_lval.tv_str = strdup(yytext);
+				return TOK_Literal;
+			}
+	YY_BREAK
+case 127:
+YY_RULE_SETUP
+#line 410 "asn1p_l.l"
+return '[';
+	YY_BREAK
+case 128:
+YY_RULE_SETUP
+#line 411 "asn1p_l.l"
+return ']';
+	YY_BREAK
+case 129:
+YY_RULE_SETUP
+#line 413 "asn1p_l.l"
 {
 			asn1p_lval.tv_opaque.buf = strdup(yytext);
 			asn1p_lval.tv_opaque.len = yyleng;
 			return TOK_opaque;
 			}
 	YY_BREAK
-case 126:
+case 130:
 YY_RULE_SETUP
-#line 406 "asn1p_l.l"
+#line 419 "asn1p_l.l"
 {
 				yy_pop_state();
-				return '}';
+				if(YYSTATE == with_syntax) {
+					asn1p_lval.tv_str = strdup(yytext);
+					return TOK_Literal;
+				} else {
+					return '}';
+				}
 			}
 	YY_BREAK
 
-case 127:
+case 131:
 YY_RULE_SETUP
-#line 414 "asn1p_l.l"
+#line 432 "asn1p_l.l"
 /* Ignore whitespace */
 	YY_BREAK
-case 128:
+case 132:
 YY_RULE_SETUP
-#line 417 "asn1p_l.l"
+#line 435 "asn1p_l.l"
 {
 		asn1c_integer_t v1 = -1, v2 = -1;
 		char *p;
@@ -2948,9 +2996,9 @@
 		return TOK_tuple;
 	}
 	YY_BREAK
-case 129:
+case 133:
 YY_RULE_SETUP
-#line 442 "asn1p_l.l"
+#line 460 "asn1p_l.l"
 {
 		asn1c_integer_t v1 = -1, v2 = -1, v3 = -1, v4 = -1;
 		char *p;
@@ -2994,14 +3042,14 @@
 		return TOK_quadruple;
 	}
 	YY_BREAK
-case 130:
+case 134:
 YY_RULE_SETUP
-#line 486 "asn1p_l.l"
+#line 504 "asn1p_l.l"
 return yytext[0];
 	YY_BREAK
-case 131:
+case 135:
 YY_RULE_SETUP
-#line 488 "asn1p_l.l"
+#line 506 "asn1p_l.l"
 {
 		if(TYPE_LIFETIME(1994, 0))
 			fprintf(stderr, "ERROR: ");
@@ -3013,9 +3061,9 @@
 			return -1;
 	}
 	YY_BREAK
-case 132:
+case 136:
 YY_RULE_SETUP
-#line 499 "asn1p_l.l"
+#line 517 "asn1p_l.l"
 {
 		fprintf(stderr,
 			"Unexpected token at line %d: \"%s\"\n",
@@ -3037,19 +3085,19 @@
 case YY_STATE_EOF(opaque):
 case YY_STATE_EOF(encoding_control):
 case YY_STATE_EOF(with_syntax):
-#line 512 "asn1p_l.l"
+#line 530 "asn1p_l.l"
 {
 		while(YYSTATE != INITIAL)
 			yy_pop_state();
 		yyterminate();
 	}
 	YY_BREAK
-case 133:
+case 137:
 YY_RULE_SETUP
-#line 519 "asn1p_l.l"
+#line 537 "asn1p_l.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
 	YY_BREAK
-#line 3053 "asn1p_l.c"
+#line 3101 "asn1p_l.c"
 
 	case YY_END_OF_BUFFER:
 		{
@@ -3336,7 +3384,7 @@
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 726 )
+			if ( yy_current_state >= 735 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -3366,11 +3414,11 @@
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 726 )
+		if ( yy_current_state >= 735 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 725);
+	yy_is_jam = (yy_current_state == 734);
 	if ( ! yy_is_jam )
 		*yy_state_ptr++ = yy_current_state;
 
@@ -3931,7 +3979,7 @@
 	return 0;
 	}
 #endif
-#line 519 "asn1p_l.l"
+#line 537 "asn1p_l.l"
 
 
 /*
diff --git a/libasn1parser/asn1p_l.l b/libasn1parser/asn1p_l.l
index c7bb18e..a327277 100644
--- a/libasn1parser/asn1p_l.l
+++ b/libasn1parser/asn1p_l.l
@@ -99,7 +99,7 @@
 
 --<[ \t]*ASN1C.RepresentAsPointer[ \t]*>--	asn1p_as_pointer = 1;
 
---		yy_push_state(dash_comment);
+<INITIAL,with_syntax>--		yy_push_state(dash_comment);
 <dash_comment,idash_comment>{
 
 	{NL}	yy_pop_state();
@@ -109,7 +109,7 @@
 	[^\r\v\f\n-]+	/* Eat */
 }
 
-<INITIAL,cpp_comment>"/*"		yy_push_state(cpp_comment);
+<INITIAL,cpp_comment,with_syntax>"/*"		yy_push_state(cpp_comment);
 <cpp_comment>{
 	[^*/<]	/* Eat */
 	"*/"	yy_pop_state();
@@ -391,12 +391,25 @@
 
 <with_syntax>{
 
-	[^&{} \t\r\v\f\n]+	{
-			asn1p_lval.tv_opaque.buf = strdup(yytext);
-			asn1p_lval.tv_opaque.len = yyleng;
-			return TOK_opaque;
+	[A-Z][A-Za-z0-9]*([-][A-Za-z0-9]+)*	{
+				asn1p_lval.tv_str = strdup(yytext);
+				return TOK_Literal;
 			}
 
+	","		{
+				asn1p_lval.tv_str = strdup(yytext);
+				return TOK_Literal;
+			}
+
+	"{"		{
+				yy_push_state(with_syntax);
+				asn1p_lval.tv_str = strdup(yytext);
+				return TOK_Literal;
+			}
+
+	"["		return '[';
+	"]"		return ']';
+
 	{WSP}+		{
 			asn1p_lval.tv_opaque.buf = strdup(yytext);
 			asn1p_lval.tv_opaque.len = yyleng;
@@ -405,7 +418,12 @@
 
 	"}"		{
 				yy_pop_state();
-				return '}';
+				if(YYSTATE == with_syntax) {
+					asn1p_lval.tv_str = strdup(yytext);
+					return TOK_Literal;
+				} else {
+					return '}';
+				}
 			}
 
 }
diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c
index 385ded7..b5c6256 100644
--- a/libasn1parser/asn1p_y.c
+++ b/libasn1parser/asn1p_y.c
@@ -25,92 +25,93 @@
 #define	TOK_capitalreference	268
 #define	TOK_typefieldreference	269
 #define	TOK_valuefieldreference	270
-#define	TOK_ABSENT	271
-#define	TOK_ABSTRACT_SYNTAX	272
-#define	TOK_ALL	273
-#define	TOK_ANY	274
-#define	TOK_APPLICATION	275
-#define	TOK_AUTOMATIC	276
-#define	TOK_BEGIN	277
-#define	TOK_BIT	278
-#define	TOK_BMPString	279
-#define	TOK_BOOLEAN	280
-#define	TOK_BY	281
-#define	TOK_CHARACTER	282
-#define	TOK_CHOICE	283
-#define	TOK_CLASS	284
-#define	TOK_COMPONENT	285
-#define	TOK_COMPONENTS	286
-#define	TOK_CONSTRAINED	287
-#define	TOK_CONTAINING	288
-#define	TOK_DEFAULT	289
-#define	TOK_DEFINITIONS	290
-#define	TOK_DEFINED	291
-#define	TOK_EMBEDDED	292
-#define	TOK_ENCODED	293
-#define	TOK_ENCODING_CONTROL	294
-#define	TOK_END	295
-#define	TOK_ENUMERATED	296
-#define	TOK_EXPLICIT	297
-#define	TOK_EXPORTS	298
-#define	TOK_EXTENSIBILITY	299
-#define	TOK_EXTERNAL	300
-#define	TOK_FALSE	301
-#define	TOK_FROM	302
-#define	TOK_GeneralizedTime	303
-#define	TOK_GeneralString	304
-#define	TOK_GraphicString	305
-#define	TOK_IA5String	306
-#define	TOK_IDENTIFIER	307
-#define	TOK_IMPLICIT	308
-#define	TOK_IMPLIED	309
-#define	TOK_IMPORTS	310
-#define	TOK_INCLUDES	311
-#define	TOK_INSTANCE	312
-#define	TOK_INSTRUCTIONS	313
-#define	TOK_INTEGER	314
-#define	TOK_ISO646String	315
-#define	TOK_MAX	316
-#define	TOK_MIN	317
-#define	TOK_MINUS_INFINITY	318
-#define	TOK_NULL	319
-#define	TOK_NumericString	320
-#define	TOK_OBJECT	321
-#define	TOK_ObjectDescriptor	322
-#define	TOK_OCTET	323
-#define	TOK_OF	324
-#define	TOK_OPTIONAL	325
-#define	TOK_PATTERN	326
-#define	TOK_PDV	327
-#define	TOK_PLUS_INFINITY	328
-#define	TOK_PRESENT	329
-#define	TOK_PrintableString	330
-#define	TOK_PRIVATE	331
-#define	TOK_REAL	332
-#define	TOK_RELATIVE_OID	333
-#define	TOK_SEQUENCE	334
-#define	TOK_SET	335
-#define	TOK_SIZE	336
-#define	TOK_STRING	337
-#define	TOK_SYNTAX	338
-#define	TOK_T61String	339
-#define	TOK_TAGS	340
-#define	TOK_TeletexString	341
-#define	TOK_TRUE	342
-#define	TOK_TYPE_IDENTIFIER	343
-#define	TOK_UNIQUE	344
-#define	TOK_UNIVERSAL	345
-#define	TOK_UniversalString	346
-#define	TOK_UTCTime	347
-#define	TOK_UTF8String	348
-#define	TOK_VideotexString	349
-#define	TOK_VisibleString	350
-#define	TOK_WITH	351
-#define	TOK_EXCEPT	352
-#define	TOK_INTERSECTION	353
-#define	TOK_UNION	354
-#define	TOK_TwoDots	355
-#define	TOK_ThreeDots	356
+#define	TOK_Literal	271
+#define	TOK_ABSENT	272
+#define	TOK_ABSTRACT_SYNTAX	273
+#define	TOK_ALL	274
+#define	TOK_ANY	275
+#define	TOK_APPLICATION	276
+#define	TOK_AUTOMATIC	277
+#define	TOK_BEGIN	278
+#define	TOK_BIT	279
+#define	TOK_BMPString	280
+#define	TOK_BOOLEAN	281
+#define	TOK_BY	282
+#define	TOK_CHARACTER	283
+#define	TOK_CHOICE	284
+#define	TOK_CLASS	285
+#define	TOK_COMPONENT	286
+#define	TOK_COMPONENTS	287
+#define	TOK_CONSTRAINED	288
+#define	TOK_CONTAINING	289
+#define	TOK_DEFAULT	290
+#define	TOK_DEFINITIONS	291
+#define	TOK_DEFINED	292
+#define	TOK_EMBEDDED	293
+#define	TOK_ENCODED	294
+#define	TOK_ENCODING_CONTROL	295
+#define	TOK_END	296
+#define	TOK_ENUMERATED	297
+#define	TOK_EXPLICIT	298
+#define	TOK_EXPORTS	299
+#define	TOK_EXTENSIBILITY	300
+#define	TOK_EXTERNAL	301
+#define	TOK_FALSE	302
+#define	TOK_FROM	303
+#define	TOK_GeneralizedTime	304
+#define	TOK_GeneralString	305
+#define	TOK_GraphicString	306
+#define	TOK_IA5String	307
+#define	TOK_IDENTIFIER	308
+#define	TOK_IMPLICIT	309
+#define	TOK_IMPLIED	310
+#define	TOK_IMPORTS	311
+#define	TOK_INCLUDES	312
+#define	TOK_INSTANCE	313
+#define	TOK_INSTRUCTIONS	314
+#define	TOK_INTEGER	315
+#define	TOK_ISO646String	316
+#define	TOK_MAX	317
+#define	TOK_MIN	318
+#define	TOK_MINUS_INFINITY	319
+#define	TOK_NULL	320
+#define	TOK_NumericString	321
+#define	TOK_OBJECT	322
+#define	TOK_ObjectDescriptor	323
+#define	TOK_OCTET	324
+#define	TOK_OF	325
+#define	TOK_OPTIONAL	326
+#define	TOK_PATTERN	327
+#define	TOK_PDV	328
+#define	TOK_PLUS_INFINITY	329
+#define	TOK_PRESENT	330
+#define	TOK_PrintableString	331
+#define	TOK_PRIVATE	332
+#define	TOK_REAL	333
+#define	TOK_RELATIVE_OID	334
+#define	TOK_SEQUENCE	335
+#define	TOK_SET	336
+#define	TOK_SIZE	337
+#define	TOK_STRING	338
+#define	TOK_SYNTAX	339
+#define	TOK_T61String	340
+#define	TOK_TAGS	341
+#define	TOK_TeletexString	342
+#define	TOK_TRUE	343
+#define	TOK_TYPE_IDENTIFIER	344
+#define	TOK_UNIQUE	345
+#define	TOK_UNIVERSAL	346
+#define	TOK_UniversalString	347
+#define	TOK_UTCTime	348
+#define	TOK_UTF8String	349
+#define	TOK_VideotexString	350
+#define	TOK_VisibleString	351
+#define	TOK_WITH	352
+#define	TOK_EXCEPT	353
+#define	TOK_INTERSECTION	354
+#define	TOK_UNION	355
+#define	TOK_TwoDots	356
+#define	TOK_ThreeDots	357
 
 #line 1 "asn1p_y.y"
 
@@ -221,26 +222,26 @@
 
 
 
-#define	YYFINAL		442
+#define	YYFINAL		446
 #define	YYFLAG		-32768
-#define	YYNTBASE	118
+#define	YYNTBASE	119
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 356 ? yytranslate[x] : 225)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 357 ? yytranslate[x] : 226)
 
 static const char yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,   112,     2,     2,     2,     2,     2,     2,   107,
-   108,     2,     2,   110,     2,   113,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,   111,   109,   114,
-     2,     2,     2,   115,     2,     2,     2,     2,     2,     2,
+     2,     2,   115,     2,     2,     2,     2,     2,     2,   108,
+   109,     2,     2,   111,     2,   116,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,   112,   110,   117,
+     2,     2,     2,   118,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-   116,     2,   117,    99,     2,     2,     2,     2,     2,     2,
+   113,     2,   114,   100,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,   105,   101,   106,     2,     2,     2,     2,     2,
+     2,     2,   106,   102,   107,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -263,7 +264,7 @@
     67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
     77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
     87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-    97,    98,   100,   102,   103,   104
+    97,    98,    99,   101,   103,   104,   105
 };
 
 #if YYDEBUG != 0
@@ -278,143 +279,144 @@
    202,   204,   205,   207,   209,   213,   217,   220,   224,   226,
    228,   232,   235,   237,   239,   245,   246,   248,   250,   254,
    257,   262,   266,   270,   274,   278,   282,   283,   285,   286,
-   293,   295,   298,   300,   302,   304,   308,   312,   316,   317,
-   320,   322,   327,   332,   337,   344,   351,   353,   358,   363,
-   365,   369,   371,   375,   379,   383,   385,   389,   391,   395,
-   397,   399,   401,   403,   405,   409,   413,   415,   420,   424,
-   425,   429,   431,   433,   435,   437,   439,   441,   443,   445,
-   447,   451,   453,   455,   457,   459,   462,   464,   466,   468,
-   470,   473,   476,   478,   480,   483,   486,   488,   490,   492,
-   494,   496,   499,   501,   504,   506,   508,   510,   512,   514,
-   516,   518,   520,   522,   524,   526,   528,   530,   532,   534,
-   536,   538,   540,   542,   543,   545,   547,   552,   556,   561,
-   563,   567,   573,   575,   579,   583,   587,   591,   596,   600,
-   602,   604,   608,   612,   616,   620,   622,   624,   625,   631,
-   633,   636,   639,   643,   645,   647,   649,   651,   653,   655,
-   657,   659,   663,   669,   671,   675,   677,   681,   682,   684,
-   686,   688,   690,   692,   694,   698,   703,   705,   709,   712,
-   716,   718,   722,   723,   725,   727,   730,   733,   737,   739,
-   743,   745,   750,   755,   757,   759,   761,   763,   764,   766,
-   769,   774,   775,   777,   779,   781,   782,   784,   786,   788,
-   790,   792,   793,   795
+   293,   295,   298,   300,   302,   304,   308,   310,   314,   318,
+   322,   323,   326,   328,   333,   338,   343,   350,   357,   359,
+   364,   369,   371,   375,   377,   381,   385,   389,   391,   395,
+   397,   401,   403,   405,   407,   409,   411,   415,   419,   421,
+   426,   430,   431,   435,   437,   439,   441,   443,   445,   447,
+   449,   451,   453,   457,   459,   461,   463,   465,   468,   470,
+   472,   474,   476,   479,   482,   484,   486,   489,   492,   494,
+   496,   498,   500,   502,   505,   507,   510,   512,   514,   516,
+   518,   520,   522,   524,   526,   528,   530,   532,   534,   536,
+   538,   540,   542,   544,   546,   548,   549,   551,   553,   558,
+   562,   567,   569,   573,   579,   581,   585,   589,   593,   597,
+   602,   606,   608,   610,   614,   618,   622,   626,   628,   630,
+   631,   637,   639,   642,   645,   649,   651,   653,   655,   657,
+   659,   661,   663,   665,   669,   675,   677,   681,   683,   687,
+   688,   690,   692,   694,   696,   698,   700,   704,   709,   711,
+   715,   718,   722,   724,   728,   729,   731,   733,   736,   739,
+   743,   745,   749,   751,   756,   761,   763,   765,   767,   769,
+   770,   772,   775,   780,   781,   783,   785,   787,   788,   790,
+   792,   794,   796,   798,   799,   801
 };
 
-static const short yyrhs[] = {   119,
-     0,   120,     0,   119,   120,     0,   221,   121,    36,   125,
-     3,    23,   128,    41,     0,     0,   122,     0,   105,   123,
-   106,     0,   105,   106,     0,   124,     0,   123,   124,     0,
-   224,     0,   224,   107,     9,   108,     0,     9,     0,     0,
-   126,     0,   127,     0,   126,   127,     0,    43,    86,     0,
-    54,    86,     0,    22,    86,     0,    45,    55,     0,    14,
-    59,     0,     0,   129,     0,   130,     0,   129,   130,     0,
-   132,     0,   138,     0,   144,     0,   175,     0,   141,     0,
-     0,    40,    14,   131,     0,   184,     0,    56,   133,   109,
-     0,    56,    48,     0,   135,     0,   133,   135,     0,     0,
-   122,     0,   136,    48,   221,   134,     0,   137,     0,   136,
-   110,   137,     0,   221,     0,   221,   105,   106,     0,   224,
-     0,    44,   139,   109,     0,    44,    19,   109,     0,    44,
-   109,     0,   140,     0,   139,   110,   140,     0,   221,     0,
-   221,   105,   106,     0,   224,     0,     0,   221,   143,     3,
-   105,   142,   180,     0,   168,     0,   181,     0,   221,     3,
-   164,     0,   221,     3,   154,     0,   221,   105,   145,   106,
-     3,   164,     0,   146,     0,   145,   110,   146,     0,   221,
-     0,   221,   111,   224,     0,   221,   111,   221,     0,   181,
-   111,   224,     0,   148,     0,   147,   110,   148,     0,   164,
-     0,   224,     0,     0,   150,     0,   151,     0,   150,   110,
-   151,     0,   224,   164,   210,     0,   164,   210,     0,    32,
-    70,   164,     0,   163,     0,   153,     0,   152,   110,   153,
-     0,   224,   164,     0,   163,     0,   164,     0,    30,   105,
-   156,   106,   158,     0,     0,    90,     0,   157,     0,   156,
-   110,   157,     0,    15,   210,     0,    16,   164,   155,   210,
-     0,    16,   173,   210,     0,    16,   174,   210,     0,    15,
-   173,   210,     0,    15,   164,   210,     0,    15,   174,   210,
-     0,     0,   159,     0,     0,    97,    84,   105,   160,   161,
-   106,     0,   162,     0,   161,   162,     0,     4,     0,   171,
-     0,   104,     0,   104,   112,   178,     0,   104,   112,   215,
-     0,   216,   166,   188,     0,     0,   165,   167,     0,   183,
-     0,    29,   105,   152,   106,     0,    80,   105,   149,   106,
-     0,    81,   105,   149,   106,     0,    80,   188,    70,   223,
-   216,   166,     0,    81,   188,    70,   223,   216,   166,     0,
-    20,     0,    20,    37,    27,   224,     0,   221,   105,   147,
-   106,     0,   168,     0,    58,    70,   168,     0,    13,     0,
-    13,   113,   221,     0,   222,   113,   221,     0,    13,   113,
-   224,     0,   222,     0,   222,   113,   169,     0,   170,     0,
-   169,   113,   170,     0,   172,     0,   172,     0,    15,     0,
-    16,     0,    15,     0,   173,   113,    15,     0,   173,   113,
-    16,     0,    14,     0,   224,   143,     3,   176,     0,   224,
-   111,   176,     0,     0,   105,   177,   180,     0,    65,     0,
-    47,     0,    88,     0,     5,     0,     7,     0,   179,     0,
-   215,     0,   178,     0,   224,     0,   221,   113,   224,     0,
-     6,     0,    10,     0,    11,     0,     4,     0,   180,     4,
-     0,    26,     0,    65,     0,    78,     0,   182,     0,    69,
-    83,     0,    67,    53,     0,    79,     0,    46,     0,    38,
-    73,     0,    28,    83,     0,    93,     0,    49,     0,   184,
-     0,    60,     0,    42,     0,    24,    83,     0,   181,     0,
-   182,   212,     0,    25,     0,    50,     0,    51,     0,    52,
-     0,    61,     0,    66,     0,    76,     0,    85,     0,    87,
-     0,    92,     0,    94,     0,    95,     0,    96,     0,    68,
-     0,   101,     0,   102,     0,    99,     0,   100,     0,    98,
-     0,     0,   189,     0,   190,     0,    82,   107,   191,   108,
-     0,   107,   191,   108,     0,   190,   107,   191,   108,     0,
-   192,     0,   192,   110,   104,     0,   192,   110,   104,   110,
-   192,     0,   193,     0,    19,    98,   193,     0,   192,   185,
-   193,     0,   192,   186,   193,     0,   193,   187,   193,     0,
-   196,   107,   191,   108,     0,   107,   191,   108,     0,   197,
-     0,   198,     0,   197,   195,   197,     0,    63,   195,   197,
-     0,   197,   195,    62,     0,    63,   195,    62,     0,   204,
-     0,   199,     0,     0,    33,    27,   105,   194,   180,     0,
-   103,     0,   103,   114,     0,   114,   103,     0,   114,   103,
-   114,     0,    82,     0,    48,     0,    47,     0,    88,     0,
-   215,     0,   179,     0,   224,     0,   221,     0,    97,    31,
-   190,     0,    97,    32,   105,   200,   106,     0,   201,     0,
-   200,   110,   201,     0,   104,     0,   224,   188,   202,     0,
-     0,   203,     0,    75,     0,    17,     0,    71,     0,   205,
-     0,   206,     0,   105,   221,   106,     0,   205,   105,   207,
-   106,     0,   208,     0,   207,   110,   208,     0,   115,   209,
-     0,   115,   113,   209,     0,   224,     0,   209,   113,   224,
-     0,     0,   211,     0,    71,     0,    35,   176,     0,   105,
-   106,     0,   105,   213,   106,     0,   214,     0,   213,   110,
-   214,     0,   224,     0,   224,   107,   215,   108,     0,   224,
-   107,   178,   108,     0,   215,     0,   104,     0,     9,     0,
-    12,     0,     0,   217,     0,   218,   220,     0,   116,   219,
-     9,   117,     0,     0,    91,     0,    21,     0,    77,     0,
-     0,    54,     0,    43,     0,    13,     0,    14,     0,    14,
-     0,     0,   224,     0,     8,     0
+static const short yyrhs[] = {   120,
+     0,   121,     0,   120,   121,     0,   222,   122,    37,   126,
+     3,    24,   129,    42,     0,     0,   123,     0,   106,   124,
+   107,     0,   106,   107,     0,   125,     0,   124,   125,     0,
+   225,     0,   225,   108,     9,   109,     0,     9,     0,     0,
+   127,     0,   128,     0,   127,   128,     0,    44,    87,     0,
+    55,    87,     0,    23,    87,     0,    46,    56,     0,    14,
+    60,     0,     0,   130,     0,   131,     0,   130,   131,     0,
+   133,     0,   139,     0,   145,     0,   176,     0,   142,     0,
+     0,    41,    14,   132,     0,   185,     0,    57,   134,   110,
+     0,    57,    49,     0,   136,     0,   134,   136,     0,     0,
+   123,     0,   137,    49,   222,   135,     0,   138,     0,   137,
+   111,   138,     0,   222,     0,   222,   106,   107,     0,   225,
+     0,    45,   140,   110,     0,    45,    20,   110,     0,    45,
+   110,     0,   141,     0,   140,   111,   141,     0,   222,     0,
+   222,   106,   107,     0,   225,     0,     0,   222,   144,     3,
+   106,   143,   181,     0,   169,     0,   182,     0,   222,     3,
+   165,     0,   222,     3,   155,     0,   222,   106,   146,   107,
+     3,   165,     0,   147,     0,   146,   111,   147,     0,   222,
+     0,   222,   112,   225,     0,   222,   112,   222,     0,   182,
+   112,   225,     0,   149,     0,   148,   111,   149,     0,   165,
+     0,   225,     0,     0,   151,     0,   152,     0,   151,   111,
+   152,     0,   225,   165,   211,     0,   165,   211,     0,    33,
+    71,   165,     0,   164,     0,   154,     0,   153,   111,   154,
+     0,   225,   165,     0,   164,     0,   165,     0,    31,   106,
+   157,   107,   159,     0,     0,    91,     0,   158,     0,   157,
+   111,   158,     0,    15,   211,     0,    16,   165,   156,   211,
+     0,    16,   174,   211,     0,    16,   175,   211,     0,    15,
+   174,   211,     0,    15,   165,   211,     0,    15,   175,   211,
+     0,     0,   160,     0,     0,    98,    85,   106,   161,   162,
+   107,     0,   163,     0,   162,   163,     0,     4,     0,    17,
+     0,   172,     0,   113,   162,   114,     0,   105,     0,   105,
+   115,   179,     0,   105,   115,   216,     0,   217,   167,   189,
+     0,     0,   166,   168,     0,   184,     0,    30,   106,   153,
+   107,     0,    81,   106,   150,   107,     0,    82,   106,   150,
+   107,     0,    81,   189,    71,   224,   217,   167,     0,    82,
+   189,    71,   224,   217,   167,     0,    21,     0,    21,    38,
+    28,   225,     0,   222,   106,   148,   107,     0,   169,     0,
+    59,    71,   169,     0,    13,     0,    13,   116,   222,     0,
+   223,   116,   222,     0,    13,   116,   225,     0,   223,     0,
+   223,   116,   170,     0,   171,     0,   170,   116,   171,     0,
+   173,     0,   173,     0,    15,     0,    16,     0,    15,     0,
+   174,   116,    15,     0,   174,   116,    16,     0,    14,     0,
+   225,   144,     3,   177,     0,   225,   112,   177,     0,     0,
+   106,   178,   181,     0,    66,     0,    48,     0,    89,     0,
+     5,     0,     7,     0,   180,     0,   216,     0,   179,     0,
+   225,     0,   222,   116,   225,     0,     6,     0,    10,     0,
+    11,     0,     4,     0,   181,     4,     0,    27,     0,    66,
+     0,    79,     0,   183,     0,    70,    84,     0,    68,    54,
+     0,    80,     0,    47,     0,    39,    74,     0,    29,    84,
+     0,    94,     0,    50,     0,   185,     0,    61,     0,    43,
+     0,    25,    84,     0,   182,     0,   183,   213,     0,    26,
+     0,    51,     0,    52,     0,    53,     0,    62,     0,    67,
+     0,    77,     0,    86,     0,    88,     0,    93,     0,    95,
+     0,    96,     0,    97,     0,    69,     0,   102,     0,   103,
+     0,   100,     0,   101,     0,    99,     0,     0,   190,     0,
+   191,     0,    83,   108,   192,   109,     0,   108,   192,   109,
+     0,   191,   108,   192,   109,     0,   193,     0,   193,   111,
+   105,     0,   193,   111,   105,   111,   193,     0,   194,     0,
+    20,    99,   194,     0,   193,   186,   194,     0,   193,   187,
+   194,     0,   194,   188,   194,     0,   197,   108,   192,   109,
+     0,   108,   192,   109,     0,   198,     0,   199,     0,   198,
+   196,   198,     0,    64,   196,   198,     0,   198,   196,    63,
+     0,    64,   196,    63,     0,   205,     0,   200,     0,     0,
+    34,    28,   106,   195,   181,     0,   104,     0,   104,   117,
+     0,   117,   104,     0,   117,   104,   117,     0,    83,     0,
+    49,     0,    48,     0,    89,     0,   216,     0,   180,     0,
+   225,     0,   222,     0,    98,    32,   191,     0,    98,    33,
+   106,   201,   107,     0,   202,     0,   201,   111,   202,     0,
+   105,     0,   225,   189,   203,     0,     0,   204,     0,    76,
+     0,    18,     0,    72,     0,   206,     0,   207,     0,   106,
+   222,   107,     0,   206,   106,   208,   107,     0,   209,     0,
+   208,   111,   209,     0,   118,   210,     0,   118,   116,   210,
+     0,   225,     0,   210,   116,   225,     0,     0,   212,     0,
+    72,     0,    36,   177,     0,   106,   107,     0,   106,   214,
+   107,     0,   215,     0,   214,   111,   215,     0,   225,     0,
+   225,   108,   216,   109,     0,   225,   108,   179,   109,     0,
+   216,     0,   105,     0,     9,     0,    12,     0,     0,   218,
+     0,   219,   221,     0,   113,   220,     9,   114,     0,     0,
+    92,     0,    22,     0,    78,     0,     0,    55,     0,    44,
+     0,    13,     0,    14,     0,    14,     0,     0,   225,     0,
+     8,     0
 };
 
 #endif
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   322,   328,   334,   350,   375,   377,   380,   384,   389,   396,
-   404,   409,   413,   422,   424,   432,   436,   444,   448,   451,
-   454,   458,   478,   480,   488,   492,   524,   528,   537,   544,
-   557,   564,   566,   578,   590,   601,   606,   612,   618,   620,
-   623,   634,   640,   646,   653,   659,   667,   671,   674,   681,
-   687,   693,   700,   706,   715,   717,   726,   734,   748,   758,
-   774,   783,   793,   803,   808,   815,   822,   832,   838,   844,
-   848,   871,   873,   875,   881,   887,   895,   901,   908,   913,
-   919,   925,   931,   934,   940,   950,   952,   955,   963,   970,
-   983,   994,  1004,  1015,  1025,  1036,  1047,  1049,  1054,  1058,
-  1063,  1068,  1074,  1078,  1089,  1098,  1107,  1118,  1140,  1147,
-  1166,  1170,  1176,  1182,  1188,  1198,  1208,  1214,  1228,  1252,
-  1259,  1273,  1282,  1292,  1302,  1312,  1320,  1341,  1350,  1359,
-  1360,  1362,  1369,  1376,  1382,  1386,  1392,  1412,  1422,  1430,
-  1430,  1435,  1440,  1445,  1450,  1454,  1458,  1461,  1464,  1469,
-  1481,  1498,  1503,  1508,  1541,  1551,  1565,  1567,  1568,  1569,
-  1570,  1571,  1572,  1573,  1574,  1575,  1576,  1577,  1578,  1584,
-  1586,  1587,  1590,  1597,  1609,  1611,  1615,  1619,  1620,  1621,
-  1622,  1623,  1627,  1628,  1629,  1630,  1634,  1635,  1642,  1642,
-  1643,  1643,  1644,  1646,  1648,  1653,  1657,  1666,  1670,  1675,
-  1679,  1685,  1695,  1699,  1702,  1705,  1708,  1713,  1722,  1730,
-  1736,  1742,  1749,  1757,  1765,  1774,  1777,  1780,  1781,  1791,
-  1793,  1794,  1795,  1798,  1802,  1807,  1813,  1818,  1821,  1824,
-  1837,  1851,  1855,  1860,  1864,  1869,  1876,  1889,  1891,  1894,
-  1898,  1901,  1906,  1910,  1918,  1933,  1939,  1946,  1959,  1971,
-  1986,  1990,  2007,  2012,  2015,  2020,  2042,  2047,  2052,  2058,
-  2064,  2072,  2080,  2088,  2095,  2105,  2110,  2140,  2142,  2145,
-  2152,  2158,  2160,  2161,  2162,  2165,  2167,  2168,  2171,  2176,
-  2183,  2190,  2192,  2197
+   323,   329,   335,   351,   376,   378,   381,   385,   390,   397,
+   405,   410,   414,   423,   425,   433,   437,   445,   449,   452,
+   455,   459,   479,   481,   489,   493,   525,   529,   538,   545,
+   558,   565,   567,   579,   591,   602,   607,   613,   619,   621,
+   624,   635,   641,   647,   654,   660,   668,   672,   675,   682,
+   688,   694,   701,   707,   716,   718,   727,   735,   749,   759,
+   775,   784,   794,   804,   809,   816,   823,   833,   839,   845,
+   849,   872,   874,   876,   882,   888,   896,   902,   909,   914,
+   920,   926,   932,   935,   941,   951,   953,   956,   964,   971,
+   984,   995,  1005,  1016,  1026,  1037,  1048,  1050,  1055,  1059,
+  1064,  1069,  1075,  1079,  1082,  1091,  1096,  1105,  1114,  1125,
+  1147,  1154,  1173,  1177,  1183,  1189,  1195,  1205,  1215,  1221,
+  1235,  1259,  1266,  1280,  1289,  1299,  1309,  1319,  1327,  1348,
+  1357,  1366,  1367,  1369,  1376,  1383,  1389,  1393,  1399,  1419,
+  1429,  1437,  1437,  1442,  1447,  1452,  1457,  1461,  1465,  1468,
+  1471,  1476,  1488,  1505,  1510,  1515,  1548,  1558,  1572,  1574,
+  1575,  1576,  1577,  1578,  1579,  1580,  1581,  1582,  1583,  1584,
+  1585,  1591,  1593,  1594,  1597,  1604,  1616,  1618,  1622,  1626,
+  1627,  1628,  1629,  1630,  1634,  1635,  1636,  1637,  1641,  1642,
+  1649,  1649,  1650,  1650,  1651,  1653,  1655,  1660,  1664,  1673,
+  1677,  1682,  1686,  1692,  1702,  1706,  1709,  1712,  1715,  1720,
+  1729,  1737,  1743,  1749,  1756,  1764,  1772,  1781,  1784,  1787,
+  1788,  1798,  1800,  1801,  1802,  1805,  1809,  1814,  1820,  1825,
+  1828,  1831,  1844,  1858,  1862,  1867,  1871,  1876,  1883,  1896,
+  1898,  1901,  1905,  1908,  1913,  1917,  1925,  1940,  1946,  1953,
+  1966,  1978,  1993,  1997,  2014,  2019,  2022,  2027,  2049,  2054,
+  2059,  2065,  2071,  2079,  2087,  2095,  2102,  2112,  2117,  2147,
+  2149,  2152,  2159,  2165,  2167,  2168,  2169,  2172,  2174,  2175,
+  2178,  2183,  2190,  2197,  2199,  2204
 };
 #endif
 
@@ -424,38 +426,38 @@
 static const char * const yytname[] = {   "$","error","$undefined.","TOK_PPEQ",
 "TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
 "TOK_tuple","TOK_quadruple","TOK_number_negative","TOK_typereference","TOK_capitalreference",
-"TOK_typefieldreference","TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX",
-"TOK_ALL","TOK_ANY","TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT",
-"TOK_BMPString","TOK_BOOLEAN","TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS",
-"TOK_COMPONENT","TOK_COMPONENTS","TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT",
-"TOK_DEFINITIONS","TOK_DEFINED","TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL",
-"TOK_END","TOK_ENUMERATED","TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY",
-"TOK_EXTERNAL","TOK_FALSE","TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString",
-"TOK_GraphicString","TOK_IA5String","TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED",
-"TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE","TOK_INSTRUCTIONS","TOK_INTEGER",
-"TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY","TOK_NULL","TOK_NumericString",
-"TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET","TOK_OF","TOK_OPTIONAL","TOK_PATTERN",
-"TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT","TOK_PrintableString","TOK_PRIVATE",
-"TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE","TOK_SET","TOK_SIZE","TOK_STRING",
-"TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString","TOK_TRUE","TOK_TYPE_IDENTIFIER",
-"TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString","TOK_UTCTime","TOK_UTF8String",
-"TOK_VideotexString","TOK_VisibleString","TOK_WITH","TOK_EXCEPT","'^'","TOK_INTERSECTION",
-"'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots","'{'","'}'","'('","')'","';'",
-"','","':'","'!'","'.'","'<'","'@'","'['","']'","ParsedGrammar","ModuleList",
-"ModuleSpecification","optObjectIdentifier","ObjectIdentifier","ObjectIdentifierBody",
-"ObjectIdentifierElement","optModuleSpecificationFlags","ModuleSpecificationFlags",
-"ModuleSpecificationFlag","optModuleSpecificationBody","ModuleSpecificationBody",
-"ModuleSpecificationElement","@1","ImportsDefinition","ImportsBundleSet","AssignedIdentifier",
-"ImportsBundle","ImportsList","ImportsElement","ExportsDefinition","ExportsBody",
-"ExportsElement","ValueSetDefinition","@2","DefinedTypeRef","DataTypeReference",
-"ParameterArgumentList","ParameterArgumentName","ActualParameterList","ActualParameter",
-"optComponentTypeLists","ComponentTypeLists","ComponentType","AlternativeTypeLists",
-"AlternativeType","ObjectClass","optUnique","FieldSpec","ClassField","optWithSyntax",
-"WithSyntax","@3","WithSyntaxFormat","WithSyntaxFormatToken","ExtensionAndException",
-"Type","NSTD_IndirectMarker","TypeDeclaration","TypeDeclarationSet","ComplexTypeReference",
-"ComplexTypeReferenceAmpList","ComplexTypeReferenceElement","ClassFieldIdentifier",
-"ClassFieldName","FieldName","DefinedObjectClass","ValueDefinition","Value",
-"@4","DefinedValue","RestrictedCharacterStringValue","Opaque","BasicTypeId",
+"TOK_typefieldreference","TOK_valuefieldreference","TOK_Literal","TOK_ABSENT",
+"TOK_ABSTRACT_SYNTAX","TOK_ALL","TOK_ANY","TOK_APPLICATION","TOK_AUTOMATIC",
+"TOK_BEGIN","TOK_BIT","TOK_BMPString","TOK_BOOLEAN","TOK_BY","TOK_CHARACTER",
+"TOK_CHOICE","TOK_CLASS","TOK_COMPONENT","TOK_COMPONENTS","TOK_CONSTRAINED",
+"TOK_CONTAINING","TOK_DEFAULT","TOK_DEFINITIONS","TOK_DEFINED","TOK_EMBEDDED",
+"TOK_ENCODED","TOK_ENCODING_CONTROL","TOK_END","TOK_ENUMERATED","TOK_EXPLICIT",
+"TOK_EXPORTS","TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE","TOK_FROM","TOK_GeneralizedTime",
+"TOK_GeneralString","TOK_GraphicString","TOK_IA5String","TOK_IDENTIFIER","TOK_IMPLICIT",
+"TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE","TOK_INSTRUCTIONS",
+"TOK_INTEGER","TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY","TOK_NULL",
+"TOK_NumericString","TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET","TOK_OF",
+"TOK_OPTIONAL","TOK_PATTERN","TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT","TOK_PrintableString",
+"TOK_PRIVATE","TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE","TOK_SET","TOK_SIZE",
+"TOK_STRING","TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString","TOK_TRUE",
+"TOK_TYPE_IDENTIFIER","TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString","TOK_UTCTime",
+"TOK_UTF8String","TOK_VideotexString","TOK_VisibleString","TOK_WITH","TOK_EXCEPT",
+"'^'","TOK_INTERSECTION","'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots","'{'",
+"'}'","'('","')'","';'","','","':'","'['","']'","'!'","'.'","'<'","'@'","ParsedGrammar",
+"ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier",
+"ObjectIdentifierBody","ObjectIdentifierElement","optModuleSpecificationFlags",
+"ModuleSpecificationFlags","ModuleSpecificationFlag","optModuleSpecificationBody",
+"ModuleSpecificationBody","ModuleSpecificationElement","@1","ImportsDefinition",
+"ImportsBundleSet","AssignedIdentifier","ImportsBundle","ImportsList","ImportsElement",
+"ExportsDefinition","ExportsBody","ExportsElement","ValueSetDefinition","@2",
+"DefinedTypeRef","DataTypeReference","ParameterArgumentList","ParameterArgumentName",
+"ActualParameterList","ActualParameter","optComponentTypeLists","ComponentTypeLists",
+"ComponentType","AlternativeTypeLists","AlternativeType","ObjectClass","optUnique",
+"FieldSpec","ClassField","optWithSyntax","WithSyntax","@3","WithSyntaxList",
+"WithSyntaxToken","ExtensionAndException","Type","NSTD_IndirectMarker","TypeDeclaration",
+"TypeDeclarationSet","ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement",
+"ClassFieldIdentifier","ClassFieldName","FieldName","DefinedObjectClass","ValueDefinition",
+"Value","@4","DefinedValue","RestrictedCharacterStringValue","Opaque","BasicTypeId",
 "BasicTypeId_UniverationCompatible","BasicType","BasicString","Union","Intersection",
 "Except","optConstraints","Constraints","SetOfConstraints","ElementSetSpecs",
 "ElementSetSpec","ConstraintSubtypeElement","@5","ConstraintRangeSpec","ConstraintSpec",
@@ -469,35 +471,35 @@
 #endif
 
 static const short yyr1[] = {     0,
-   118,   119,   119,   120,   121,   121,   122,   122,   123,   123,
-   124,   124,   124,   125,   125,   126,   126,   127,   127,   127,
-   127,   127,   128,   128,   129,   129,   130,   130,   130,   130,
-   130,   131,   130,   130,   132,   132,   133,   133,   134,   134,
-   135,   136,   136,   137,   137,   137,   138,   138,   138,   139,
-   139,   140,   140,   140,   142,   141,   143,   143,   144,   144,
-   144,   145,   145,   146,   146,   146,   146,   147,   147,   148,
-   148,   149,   149,   150,   150,   151,   151,   151,   151,   152,
-   152,   153,   153,   153,   154,   155,   155,   156,   156,   157,
-   157,   157,   157,   157,   157,   157,   158,   158,   160,   159,
-   161,   161,   162,   162,   163,   163,   163,   164,   165,   166,
-   167,   167,   167,   167,   167,   167,   167,   167,   167,   167,
-   167,   168,   168,   168,   168,   168,   168,   169,   169,   170,
-   171,   172,   172,   173,   173,   173,   174,   175,   176,   177,
-   176,   176,   176,   176,   176,   176,   176,   176,   176,   178,
-   178,   179,   179,   179,   180,   180,   181,   181,   181,   181,
-   181,   181,   181,   181,   181,   181,   181,   181,   181,   182,
-   182,   182,   183,   183,   184,   184,   184,   184,   184,   184,
-   184,   184,   184,   184,   184,   184,   184,   184,   185,   185,
-   186,   186,   187,   188,   188,   189,   189,   190,   190,   191,
-   191,   191,   192,   192,   192,   192,   192,   193,   193,   193,
-   193,   193,   193,   193,   193,   193,   193,   194,   193,   195,
-   195,   195,   195,   196,   196,   197,   197,   197,   197,   197,
-   198,   199,   199,   200,   200,   201,   201,   202,   202,   203,
-   203,   203,   204,   204,   205,   206,   207,   207,   208,   208,
+   119,   120,   120,   121,   122,   122,   123,   123,   124,   124,
+   125,   125,   125,   126,   126,   127,   127,   128,   128,   128,
+   128,   128,   129,   129,   130,   130,   131,   131,   131,   131,
+   131,   132,   131,   131,   133,   133,   134,   134,   135,   135,
+   136,   137,   137,   138,   138,   138,   139,   139,   139,   140,
+   140,   141,   141,   141,   143,   142,   144,   144,   145,   145,
+   145,   146,   146,   147,   147,   147,   147,   148,   148,   149,
+   149,   150,   150,   151,   151,   152,   152,   152,   152,   153,
+   153,   154,   154,   154,   155,   156,   156,   157,   157,   158,
+   158,   158,   158,   158,   158,   158,   159,   159,   161,   160,
+   162,   162,   163,   163,   163,   163,   164,   164,   164,   165,
+   166,   167,   168,   168,   168,   168,   168,   168,   168,   168,
+   168,   168,   168,   169,   169,   169,   169,   169,   169,   170,
+   170,   171,   172,   173,   173,   174,   174,   174,   175,   176,
+   177,   178,   177,   177,   177,   177,   177,   177,   177,   177,
+   177,   179,   179,   180,   180,   180,   181,   181,   182,   182,
+   182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
+   182,   183,   183,   183,   184,   184,   185,   185,   185,   185,
+   185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
+   186,   186,   187,   187,   188,   189,   189,   190,   190,   191,
+   191,   192,   192,   192,   193,   193,   193,   193,   193,   194,
+   194,   194,   194,   194,   194,   194,   194,   194,   194,   195,
+   194,   196,   196,   196,   196,   197,   197,   198,   198,   198,
+   198,   198,   199,   200,   200,   201,   201,   202,   202,   203,
+   203,   204,   204,   204,   205,   205,   206,   207,   208,   208,
    209,   209,   210,   210,   211,   211,   212,   212,   213,   213,
-   214,   214,   214,   214,   214,   215,   215,   216,   216,   217,
-   218,   219,   219,   219,   219,   220,   220,   220,   221,   221,
-   222,   223,   223,   224
+   214,   214,   215,   215,   215,   215,   215,   216,   216,   217,
+   217,   218,   219,   220,   220,   220,   220,   221,   221,   221,
+   222,   222,   223,   224,   224,   225
 };
 
 static const short yyr2[] = {     0,
@@ -511,311 +513,303 @@
      1,     0,     1,     1,     3,     3,     2,     3,     1,     1,
      3,     2,     1,     1,     5,     0,     1,     1,     3,     2,
      4,     3,     3,     3,     3,     3,     0,     1,     0,     6,
-     1,     2,     1,     1,     1,     3,     3,     3,     0,     2,
-     1,     4,     4,     4,     6,     6,     1,     4,     4,     1,
-     3,     1,     3,     3,     3,     1,     3,     1,     3,     1,
-     1,     1,     1,     1,     3,     3,     1,     4,     3,     0,
-     3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     3,     1,     1,     1,     1,     2,     1,     1,     1,     1,
-     2,     2,     1,     1,     2,     2,     1,     1,     1,     1,
-     1,     2,     1,     2,     1,     1,     1,     1,     1,     1,
+     1,     2,     1,     1,     1,     3,     1,     3,     3,     3,
+     0,     2,     1,     4,     4,     4,     6,     6,     1,     4,
+     4,     1,     3,     1,     3,     3,     3,     1,     3,     1,
+     3,     1,     1,     1,     1,     1,     3,     3,     1,     4,
+     3,     0,     3,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     3,     1,     1,     1,     1,     2,     1,     1,
+     1,     1,     2,     2,     1,     1,     2,     2,     1,     1,
+     1,     1,     1,     2,     1,     2,     1,     1,     1,     1,
      1,     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,     3,     4,     3,     1,
-     1,     3,     3,     3,     3,     1,     1,     0,     5,     1,
-     2,     2,     3,     1,     1,     1,     1,     1,     1,     1,
-     1,     3,     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
+     1,     1,     1,     1,     1,     0,     1,     1,     4,     3,
+     4,     1,     3,     5,     1,     3,     3,     3,     3,     4,
+     3,     1,     1,     3,     3,     3,     3,     1,     1,     0,
+     5,     1,     2,     2,     3,     1,     1,     1,     1,     1,
+     1,     1,     1,     3,     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,
-   279,   280,     1,     2,     5,     3,     0,     0,     6,   284,
+   281,   282,     1,     2,     5,     3,     0,     0,     6,   286,
     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,   175,     0,     0,
-   176,   177,   178,     0,   179,   180,   188,   181,   182,   183,
-   184,   185,   186,   187,     0,    24,    25,    27,    28,    31,
+    18,    21,    19,     0,    17,    12,    23,   177,     0,     0,
+   178,   179,   180,     0,   181,   182,   190,   183,   184,   185,
+   186,   187,   188,   189,     0,    24,    25,    27,    28,    31,
     29,    30,    34,     0,     0,    32,     0,    49,     0,    50,
     52,    54,    36,     0,    37,     0,    42,    44,    46,     4,
-    26,   268,   122,   281,     0,   157,     0,     0,   171,   164,
-   168,   170,   158,     0,     0,   159,   163,   167,     0,     0,
-    57,    58,   160,   169,   126,     0,    33,    48,    47,     0,
-     0,    35,    38,     0,     0,     0,     0,   272,    60,    59,
-   109,   269,   276,     0,   172,   166,   165,   162,   161,     0,
+    26,   270,   124,   283,     0,   159,     0,     0,   173,   166,
+   170,   172,   160,     0,     0,   161,   165,   169,     0,     0,
+    57,    58,   162,   171,   128,     0,    33,    48,    47,     0,
+     0,    35,    38,     0,     0,     0,     0,   274,    60,    59,
+   111,   271,   278,     0,   174,   168,   167,   164,   163,     0,
     62,     0,    64,     0,     0,     0,    51,    53,    39,    43,
-    45,     0,   274,   275,   273,     0,     0,   194,   278,   277,
-   270,   123,   125,     0,     0,     0,     0,    55,   132,   133,
-   127,   128,   130,   124,   145,   152,   146,   266,   153,   154,
-   267,   143,   142,   144,   140,   138,   149,   147,   148,     0,
-   150,    40,    41,   268,   268,     0,    88,     0,   122,   281,
-   117,     0,     0,   194,   194,   110,   120,   173,   160,   111,
-     0,     0,     0,   108,   195,   196,   268,    63,    67,    66,
-    65,     0,     0,     0,     0,     0,   137,   134,     0,   255,
-   253,   253,   253,    90,   254,    86,   253,   253,    97,     0,
-   271,     0,   268,     0,   268,     0,   268,     0,     0,   174,
-   268,     0,     0,     0,   226,   225,     0,   224,   227,     0,
-     0,     0,   229,     0,   200,   203,     0,   210,   211,   217,
-   216,   243,   244,   228,   231,   230,     0,    61,   155,    56,
-   129,   141,   151,   139,   256,    95,     0,    94,    96,    87,
-   253,    92,    93,     0,    85,    98,    89,     0,   105,     0,
-    80,    83,    84,   268,   121,     0,     0,    73,    74,    79,
-   253,   268,   282,     0,   282,   265,   257,     0,   259,   264,
-   261,     0,    68,    70,    71,     0,     0,     0,   220,     0,
-     0,     0,     0,     0,     0,   198,   191,   192,   189,   190,
-     0,     0,     0,   193,     0,     0,     0,     0,     0,   156,
-   135,   136,    91,     0,   118,     0,   112,   268,    82,   268,
-   113,   268,    77,   253,   268,   283,   114,   268,   258,     0,
-     0,   119,   268,   197,   204,   218,   221,   222,   215,   213,
-   232,     0,   245,   209,   201,   205,   206,   207,     0,   214,
-   212,     0,     0,   247,   199,    99,   106,   107,   150,    81,
-    78,    75,    76,   109,   109,   260,     0,     0,    69,     0,
-   223,   236,     0,   234,   194,     0,   208,     0,   249,   251,
-   246,     0,     0,   115,   116,   263,   262,   219,   233,     0,
-   238,   202,   250,     0,   248,   103,     0,   101,   104,   131,
-   235,   241,   242,   240,   237,   239,   252,   100,   102,     0,
-     0,     0
+    45,     0,   276,   277,   275,     0,     0,   196,   280,   279,
+   272,   125,   127,     0,     0,     0,     0,    55,   134,   135,
+   129,   130,   132,   126,   147,   154,   148,   268,   155,   156,
+   269,   145,   144,   146,   142,   140,   151,   149,   150,     0,
+   152,    40,    41,   270,   270,     0,    88,     0,   124,   283,
+   119,     0,     0,   196,   196,   112,   122,   175,   162,   113,
+     0,     0,     0,   110,   197,   198,   270,    63,    67,    66,
+    65,     0,     0,     0,     0,     0,   139,   136,     0,   257,
+   255,   255,   255,    90,   256,    86,   255,   255,    97,     0,
+   273,     0,   270,     0,   270,     0,   270,     0,     0,   176,
+   270,     0,     0,     0,   228,   227,     0,   226,   229,     0,
+     0,     0,   231,     0,   202,   205,     0,   212,   213,   219,
+   218,   245,   246,   230,   233,   232,     0,    61,   157,    56,
+   131,   143,   153,   141,   258,    95,     0,    94,    96,    87,
+   255,    92,    93,     0,    85,    98,    89,     0,   107,     0,
+    80,    83,    84,   270,   123,     0,     0,    73,    74,    79,
+   255,   270,   284,     0,   284,   267,   259,     0,   261,   266,
+   263,     0,    68,    70,    71,     0,     0,     0,   222,     0,
+     0,     0,     0,     0,     0,   200,   193,   194,   191,   192,
+     0,     0,     0,   195,     0,     0,     0,     0,     0,   158,
+   137,   138,    91,     0,   120,     0,   114,   270,    82,   270,
+   115,   270,    77,   255,   270,   285,   116,   270,   260,     0,
+     0,   121,   270,   199,   206,   220,   223,   224,   217,   215,
+   234,     0,   247,   211,   203,   207,   208,   209,     0,   216,
+   214,     0,     0,   249,   201,    99,   108,   109,   152,    81,
+    78,    75,    76,   111,   111,   262,     0,     0,    69,     0,
+   225,   238,     0,   236,   196,     0,   210,     0,   251,   253,
+   248,     0,     0,   117,   118,   265,   264,   221,   235,     0,
+   240,   204,   252,     0,   250,   103,   104,     0,     0,   101,
+   105,   133,   237,   243,   244,   242,   239,   241,   254,     0,
+   100,   102,   106,     0,     0,     0
 };
 
-static const short yydefgoto[] = {   440,
+static const short yydefgoto[] = {   444,
      3,     4,     8,     9,    13,    14,    25,    26,    27,    55,
     56,    57,   107,    58,    74,   183,    75,    76,    77,    59,
     69,    70,    60,   212,   100,    61,   130,   131,   312,   313,
    297,   298,   299,   290,   291,   119,   281,   186,   187,   285,
-   286,   413,   427,   428,   300,   301,   147,   148,   196,   101,
-   161,   162,   429,   163,   222,   223,    62,   176,   214,   177,
+   286,   413,   429,   430,   300,   301,   147,   148,   196,   101,
+   161,   162,   431,   432,   222,   223,    62,   176,   214,   177,
    253,   270,   102,   103,   200,   104,   332,   333,   335,   204,
    205,   206,   254,   255,   256,   400,   321,   257,   258,   259,
-   260,   403,   404,   435,   436,   261,   262,   263,   383,   384,
+   260,   403,   404,   437,   438,   261,   262,   263,   383,   384,
    409,   224,   225,   240,   308,   309,   264,   121,   122,   123,
    146,   151,   265,   105,   355,   266
 };
 
-static const short yypact[] = {   258,
--32768,-32768,   258,-32768,   -19,-32768,    51,   103,-32768,-32768,
--32768,-32768,    69,-32768,    39,    87,-32768,-32768,   143,   114,
-    73,   105,   212,   183,   277,    87,-32768,   174,-32768,-32768,
--32768,-32768,-32768,   262,-32768,-32768,   429,-32768,   279,    42,
--32768,-32768,-32768,   211,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,   254,   429,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   354,   581,-32768,   188,-32768,   167,-32768,
-   213,-32768,-32768,    38,-32768,   -28,-32768,   219,-32768,-32768,
--32768,    -9,   216,-32768,   251,-32768,   252,   264,-32768,-32768,
--32768,-32768,-32768,   289,   260,-32768,-32768,-32768,   656,   341,
--32768,-32768,-32768,-32768,   233,   345,-32768,-32768,-32768,   247,
-   243,-32768,-32768,   258,   247,   244,   246,     4,-32768,-32768,
--32768,-32768,    59,   247,-32768,-32768,-32768,-32768,-32768,   -22,
--32768,   241,   248,   250,   301,   158,-32768,-32768,   -19,-32768,
--32768,   276,-32768,-32768,-32768,   349,   506,   -54,-32768,-32768,
--32768,-32768,-32768,   357,   656,   353,   247,-32768,-32768,-32768,
-   256,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   257,
-   253,-32768,-32768,    28,    12,    97,-32768,   255,   -73,   266,
-   326,   268,   304,   106,   122,-32768,-32768,-32768,   271,-32768,
-   272,   274,   168,-32768,-32768,   280,   267,-32768,-32768,-32768,
--32768,   380,   290,   380,   353,   158,-32768,-32768,   158,-32768,
-    62,    27,    62,-32768,-32768,   296,    27,    62,   288,   276,
--32768,   361,     8,   298,    15,   319,    15,   320,    56,-32768,
-     7,   168,   293,   366,-32768,-32768,   135,-32768,-32768,   299,
-   258,   168,-32768,   286,   200,   297,   291,   135,-32768,-32768,
--32768,   292,-32768,-32768,-32768,-32768,   168,-32768,-32768,   395,
--32768,   395,-32768,-32768,-32768,-32768,   311,-32768,-32768,-32768,
-    62,-32768,-32768,   318,-32768,-32768,-32768,   353,   300,   100,
--32768,-32768,-32768,   267,-32768,   337,   302,   306,-32768,-32768,
-    62,   267,   353,   303,   353,-32768,-32768,   141,-32768,-32768,
-   317,   147,-32768,-32768,-32768,   310,   231,   305,   312,   308,
-   186,   321,   322,   323,   327,-32768,-32768,-32768,-32768,-32768,
-   330,   231,   231,-32768,   231,   168,   278,   316,   328,-32768,
--32768,-32768,-32768,   333,-32768,   295,-32768,     8,-32768,   267,
--32768,     2,-32768,    62,   267,-32768,-32768,   267,-32768,    81,
-   295,-32768,     7,-32768,-32768,-32768,-32768,   331,-32768,-32768,
-   280,    31,-32768,-32768,   315,-32768,-32768,-32768,   332,-32768,
--32768,     9,   148,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,   336,   343,-32768,   380,
--32768,-32768,   156,-32768,   -54,   168,-32768,   353,   339,-32768,
--32768,   316,   139,-32768,-32768,-32768,-32768,   395,-32768,    31,
-     5,   221,   339,   353,-32768,-32768,    20,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   453,
-   455,-32768
+static const short yypact[] = {    76,
+-32768,-32768,    76,-32768,   -55,-32768,    23,    59,-32768,-32768,
+-32768,-32768,    31,-32768,    32,   350,-32768,-32768,   101,   120,
+   136,   144,   131,   152,   192,   350,-32768,   139,-32768,-32768,
+-32768,-32768,-32768,   233,-32768,-32768,   394,-32768,   275,    34,
+-32768,-32768,-32768,   133,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   258,   394,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   224,   547,-32768,   197,-32768,    63,-32768,
+   203,-32768,-32768,    45,-32768,    24,-32768,   205,-32768,-32768,
+-32768,    21,   206,-32768,   240,-32768,   254,   266,-32768,-32768,
+-32768,-32768,-32768,   288,   260,-32768,-32768,-32768,   623,   343,
+-32768,-32768,-32768,-32768,   236,   352,-32768,-32768,-32768,   248,
+   251,-32768,-32768,    76,   248,   252,   257,   106,-32768,-32768,
+-32768,-32768,    43,   248,-32768,-32768,-32768,-32768,-32768,   100,
+-32768,   249,   256,   261,   300,   158,-32768,-32768,   -55,-32768,
+-32768,   189,-32768,-32768,-32768,   351,   471,   -27,-32768,-32768,
+-32768,-32768,-32768,   363,   623,   361,   248,-32768,-32768,-32768,
+   269,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   277,
+   262,-32768,-32768,    70,    62,   108,-32768,   263,    80,   264,
+   357,   291,   327,   -13,    -9,-32768,-32768,-32768,   293,-32768,
+   294,   295,   323,-32768,-32768,   301,   297,-32768,-32768,-32768,
+-32768,   407,   250,   407,   361,   158,-32768,-32768,   158,-32768,
+    14,     7,    14,-32768,-32768,   324,     7,    14,   316,   189,
+-32768,   388,     8,   265,    47,   353,    47,   354,    52,-32768,
+     9,   323,   328,   395,-32768,-32768,   -16,-32768,-32768,   255,
+    76,   323,-32768,   313,    99,   331,   318,   -16,-32768,-32768,
+-32768,   326,-32768,-32768,-32768,-32768,   323,-32768,-32768,   429,
+-32768,   429,-32768,-32768,-32768,-32768,   333,-32768,-32768,-32768,
+    14,-32768,-32768,   355,-32768,-32768,-32768,   361,   321,   118,
+-32768,-32768,-32768,   297,-32768,   366,   334,   337,-32768,-32768,
+    14,   297,   361,   335,   361,-32768,-32768,   162,-32768,-32768,
+   330,   173,-32768,-32768,-32768,   340,   370,   338,   341,   346,
+   234,   344,   348,   358,   364,-32768,-32768,-32768,-32768,-32768,
+   359,   370,   370,-32768,   370,   323,   380,   339,   365,-32768,
+-32768,-32768,-32768,   349,-32768,   246,-32768,     8,-32768,   297,
+-32768,    38,-32768,    14,   297,-32768,-32768,   297,-32768,    57,
+   246,-32768,     9,-32768,-32768,-32768,-32768,   345,-32768,-32768,
+   301,     2,-32768,-32768,   356,-32768,-32768,-32768,   368,-32768,
+-32768,    17,   188,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,   372,   374,-32768,   407,
+-32768,-32768,   195,-32768,   -27,   323,-32768,   361,   377,-32768,
+-32768,   339,    11,-32768,-32768,-32768,-32768,   429,-32768,     2,
+   121,   225,   377,   361,-32768,-32768,-32768,    11,    19,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,     5,
+-32768,-32768,-32768,   460,   466,-32768
 };
 
 static const short yypgoto[] = {-32768,
--32768,   454,-32768,   324,-32768,   443,-32768,-32768,   432,-32768,
--32768,   404,-32768,-32768,-32768,-32768,   387,-32768,   347,-32768,
--32768,   355,-32768,-32768,   399,-32768,-32768,   313,-32768,   104,
-   229,-32768,   118,-32768,   123,-32768,-32768,-32768,   242,-32768,
--32768,-32768,-32768,    47,  -228,   -80,-32768,   -62,-32768,  -138,
--32768,   263,-32768,  -344,   307,   309,-32768,  -145,-32768,  -317,
-   -26,  -211,   -68,   335,-32768,    29,-32768,-32768,-32768,  -187,
--32768,   153,  -194,    71,  -133,-32768,   220,-32768,  -267,-32768,
--32768,-32768,    63,-32768,-32768,-32768,-32768,-32768,-32768,    72,
-    78,  -209,-32768,-32768,-32768,   127,  -125,  -172,-32768,-32768,
--32768,-32768,     1,-32768,   184,    -7
+-32768,   467,-32768,   336,-32768,   459,-32768,-32768,   453,-32768,
+-32768,   430,-32768,-32768,-32768,-32768,   414,-32768,   379,-32768,
+-32768,   385,-32768,-32768,   434,-32768,-32768,   347,-32768,   140,
+   267,-32768,   153,-32768,   159,-32768,-32768,-32768,   276,-32768,
+-32768,-32768,    81,  -250,  -228,   -80,-32768,   -44,-32768,  -103,
+-32768,   298,-32768,  -111,   332,   342,-32768,    -3,-32768,  -278,
+  -107,  -211,    86,   369,-32768,    26,-32768,-32768,-32768,  -187,
+-32768,   186,   -64,   107,  -141,-32768,   268,-32768,  -259,-32768,
+-32768,-32768,    92,-32768,-32768,-32768,-32768,-32768,-32768,   103,
+   111,  -209,-32768,-32768,-32768,   160,  -125,   -50,-32768,-32768,
+-32768,-32768,     1,-32768,   220,    -7
 };
 
 
-#define	YYLAST		752
+#define	YYLAST		720
 
 
 static const short yytable[] = {    15,
-     5,   120,   272,     5,   292,    15,   236,   238,   197,    10,
-   179,   276,   278,   279,    10,    10,    10,   282,   283,   114,
-   117,   432,    10,   426,   143,   217,   218,   202,   387,    65,
-   132,  -279,    72,   296,   159,   160,    79,    64,    10,   124,
-    71,   217,   218,   397,    78,    10,   296,   316,    65,    10,
-     1,     2,   203,   370,     1,     2,    64,   325,    10,    11,
-    67,   219,   219,    10,   168,    63,    79,   171,   430,   381,
-   274,   343,   339,   275,    78,   433,    10,    11,   198,   434,
-   144,   115,   430,   154,    63,     7,   132,   155,    10,   168,
-   179,   353,   171,   179,   145,   295,   219,   220,   220,   133,
-    20,   149,    72,   221,   226,   289,   118,    79,    21,   178,
-    71,   289,   150,   310,   139,    78,   153,   118,   289,   292,
-   -72,   408,   118,   118,   152,   438,   268,   118,   181,    22,
-   118,    23,   220,  -253,   402,   164,   180,  -253,    16,   277,
-    24,   379,   426,   118,   393,    19,   112,   201,   209,   211,
-    68,    28,   293,   159,   160,   133,    12,   210,    30,   306,
-   314,   307,   165,   166,   167,    10,   168,   169,   170,   171,
-     1,     2,    29,   166,    17,    10,   168,   169,   170,   171,
-     1,     2,   394,   365,   306,   395,   243,   202,   418,   178,
-    31,   166,   178,    10,   168,   169,   170,   171,   376,   377,
-   244,   378,   229,   202,   172,   347,   230,   273,   181,   348,
-   235,   181,   203,   349,   245,   246,   180,   421,    10,   180,
-   388,   354,   173,     1,     2,   294,   237,   302,   203,   302,
-   247,   311,   245,   315,   310,   398,   166,   319,    10,   168,
-   169,   170,   171,     1,     2,   174,   359,   369,   320,   248,
-   360,   324,   362,   411,    10,   249,   363,   412,    73,     1,
-     2,   419,   175,   244,   250,   420,    32,   293,    33,   391,
-     1,     2,   251,   249,   252,   109,   110,   245,   246,    34,
-   345,    36,   314,   166,    37,    10,   168,   169,   170,   171,
-   184,   185,    66,   247,    80,   356,   108,   356,   327,   328,
-   329,   330,    10,   168,   159,   160,   171,     1,     2,   331,
-    83,    84,   248,     1,     2,   159,   160,   111,   249,   327,
-   328,   329,   330,   116,   245,   341,   342,   250,   124,   322,
-   323,   414,   415,   125,   126,   251,   127,   252,   389,   380,
-   294,   128,   129,   134,   302,   135,   180,   136,   138,   141,
-   142,   156,   311,   389,   158,   315,    82,   188,   157,   207,
-    10,   180,   232,   216,   405,   249,    83,    84,   213,   215,
-  -280,   231,   233,   234,   410,   239,   241,    85,    38,    86,
-   242,    87,   118,   269,   284,   280,   267,   288,   303,   305,
-   317,    88,   318,   326,   334,    89,   338,   336,   340,    90,
-   410,   344,    91,    41,    42,    43,   350,   351,   357,   366,
-   368,   346,   405,    92,    45,   352,   437,   364,    93,    46,
-    94,    47,    95,   361,   406,   367,   372,   203,   373,    48,
-   382,    96,    97,   375,   374,   385,    10,   386,    49,   407,
-    50,     1,     2,   416,   401,    51,    98,    52,    53,    54,
-   417,   424,   441,    38,   442,    18,     6,    35,    99,    81,
-   113,   140,   182,   106,   137,   304,   399,   208,    39,   392,
-   390,   287,    40,   439,   371,   271,   422,   337,    41,    42,
-    43,   199,   431,   425,    44,   423,   396,     0,   358,    45,
-     0,   227,     0,   228,    46,     0,    47,     0,     0,     0,
-     0,     0,     0,     0,    48,     0,     0,     0,     0,     0,
-     0,     0,     0,    49,     0,    50,     0,     0,   189,   190,
-    51,     0,    52,    53,    54,   191,     0,     0,     0,    85,
-    38,    86,     0,    87,   192,     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,   193,     0,    92,    45,     0,     0,     0,
-    93,    46,    94,    47,    95,     0,     0,     0,     0,     0,
-     0,    48,     0,    96,    97,   194,   195,     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
+     5,   120,   272,     5,   292,    15,   236,   238,   426,    10,
+   179,   276,   278,   279,   426,    10,    10,   282,   283,   159,
+   160,   427,   426,   163,    10,   159,   160,   427,   178,    65,
+    10,    11,    72,   159,   160,   427,    79,    64,    10,    11,
+    71,    10,   219,   197,    78,    10,     1,     2,    65,   219,
+     7,   117,    10,    67,    10,   202,    64,     1,     2,    10,
+   168,   370,    63,   171,    10,   168,    79,   387,   171,   202,
+   296,   343,   114,   202,    78,   217,   218,   381,   220,   296,
+   203,    63,   397,   217,   218,   220,   149,   319,     1,     2,
+   179,   353,   235,   179,   203,    16,   237,   150,   203,   133,
+   320,   163,    72,   221,   226,   219,   402,    79,   178,    28,
+    71,   178,   289,   310,   139,    78,   153,   428,   443,   292,
+   118,   118,   277,   428,   152,   441,   268,   143,   181,    12,
+   295,   428,   408,   118,   115,   164,   180,    17,   434,    19,
+    10,   220,   289,    68,   393,     1,     2,   201,   209,   211,
+   118,   289,   293,   -72,   112,   133,   306,   210,   307,   118,
+   314,   306,   165,   166,   167,    10,   168,   169,   170,   171,
+     1,     2,   109,   110,   118,   365,  -255,   316,   442,    29,
+  -255,    73,   118,   144,   132,  -281,    32,   325,   418,   442,
+   376,   377,   435,   378,    34,   124,   436,   145,   327,   328,
+   329,   330,   339,   184,   185,   172,   154,   273,   181,   331,
+   155,   181,   274,   349,   229,   275,   180,   421,   230,   180,
+   388,   354,    30,   173,   347,   294,    82,   302,   348,   302,
+    31,   311,   198,   315,   310,   398,    83,    84,    33,   166,
+   132,    10,   168,   169,   170,   171,   174,    36,    85,    38,
+    86,   324,    87,    10,   168,    10,    37,   171,     1,     2,
+     1,     2,    88,   175,   159,   160,    89,   293,   359,   391,
+    90,   379,   360,    91,    41,    42,    43,    83,    84,   362,
+   345,   245,   314,   363,    92,    45,   322,   323,    66,    93,
+    46,    94,    47,    95,   411,   356,   369,   356,   412,    80,
+    48,   419,    96,    97,   394,   420,   108,   395,   111,    49,
+   116,    50,     1,     2,   159,   160,    51,    98,    52,    53,
+    54,   124,   249,   125,   327,   328,   329,   330,   166,    99,
+    10,   168,   169,   170,   171,     1,     2,   126,   389,   127,
+   294,   128,   243,   129,   302,   134,   180,   341,   342,   414,
+   415,   135,   311,   389,   136,   315,   244,   138,   141,   188,
+   156,   180,   142,    20,   405,   207,   158,   157,    10,  -282,
+   245,   246,    21,   216,   410,   166,   231,    10,   168,   169,
+   170,   171,     1,     2,   213,   166,   247,    10,   168,   169,
+   170,   171,   215,    22,   232,    23,   233,   234,   239,   241,
+   410,    10,   242,   244,    24,   248,     1,     2,   267,   118,
+   269,   249,   405,   284,   280,   288,   439,   245,   246,    38,
+   250,   326,   318,   303,   305,   336,   317,   245,   251,   334,
+   252,   338,   340,   247,    39,   346,   350,   361,    40,   344,
+   351,   357,   380,   366,    41,    42,    43,   352,   364,   368,
+    44,   203,   248,   372,   386,    45,   382,   367,   249,   445,
+    46,   401,    47,   375,   373,   446,   406,   250,   249,     6,
+    48,    18,   374,   385,   182,   251,   407,   252,    35,    49,
+   416,    50,   417,   189,   190,    81,    51,   113,    52,    53,
+    54,   191,   424,   140,   137,    85,    38,    86,   106,    87,
+   192,   208,   399,   304,   392,   287,   390,   371,   440,    88,
+   271,   433,   422,    89,   425,   199,   227,    90,   423,   396,
+    91,    41,    42,    43,   358,   337,   228,     0,     0,   193,
+     0,    92,    45,     0,     0,     0,    93,    46,    94,    47,
+    95,     0,     0,     0,     0,     0,     0,    48,     0,    96,
+    97,   194,   195,     0,     0,     0,    49,     0,    50,    83,
+    84,     0,     0,    51,    98,    52,    53,    54,     0,     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,     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,
-     0,    82,   214,     3,   233,    13,   194,   195,   147,     8,
-   136,   221,   222,   223,     8,     8,     8,   227,   228,    48,
-    30,    17,     8,     4,    21,    14,    15,    82,   346,    37,
-    99,   105,    40,    32,    15,    16,    44,    37,     8,   113,
-    40,    14,    15,   361,    44,     8,    32,   242,    56,     8,
-    13,    14,   107,   321,    13,    14,    56,   252,     8,     9,
-    19,    35,    35,     8,     9,    37,    74,    12,   413,   337,
-   216,   281,   267,   219,    74,    71,     8,     9,   147,    75,
-    77,   110,   427,   106,    56,   105,   155,   110,     8,     9,
-   216,   301,    12,   219,    91,   234,    35,    71,    71,    99,
-    14,    43,   110,   184,   185,   104,   116,   115,    22,   136,
-   110,   104,    54,   239,   114,   115,   124,   116,   104,   348,
-   106,   113,   116,   116,   124,   106,   207,   116,   136,    43,
-   116,    45,    71,   106,   104,   135,   136,   110,    36,   113,
-    54,   336,     4,   116,   354,   107,   109,   147,   156,   157,
-   109,     9,   233,    15,    16,   155,   106,   157,    86,   104,
-   241,   106,     5,     6,     7,     8,     9,    10,    11,    12,
-    13,    14,    59,     6,   106,     8,     9,    10,    11,    12,
-    13,    14,   355,   317,   104,   358,    19,    82,   400,   216,
-    86,     6,   219,     8,     9,    10,    11,    12,   332,   333,
-    33,   335,   106,    82,    47,   106,   110,   215,   216,   110,
-   105,   219,   107,   294,    47,    48,   216,   405,     8,   219,
-   346,   302,    65,    13,    14,   233,   105,   235,   107,   237,
-    63,   239,    47,   241,   360,   361,     6,   103,     8,     9,
-    10,    11,    12,    13,    14,    88,   106,    62,   114,    82,
-   110,   251,   106,   106,     8,    88,   110,   110,    48,    13,
-    14,   106,   105,    33,    97,   110,    55,   348,    86,   350,
-    13,    14,   105,    88,   107,   109,   110,    47,    48,     3,
-   288,   108,   363,     6,    23,     8,     9,    10,    11,    12,
-    15,    16,    14,    63,    41,   303,   109,   305,    99,   100,
-   101,   102,     8,     9,    15,    16,    12,    13,    14,   110,
-    13,    14,    82,    13,    14,    15,    16,   105,    88,    99,
-   100,   101,   102,   105,    47,    15,    16,    97,   113,    31,
-    32,   394,   395,    83,    83,   105,    73,   107,   346,    62,
-   348,    53,    83,     3,   352,   113,   346,     3,   106,   106,
-   105,   111,   360,   361,   105,   363,     3,     9,   111,     3,
-     8,   361,    37,   111,   372,    88,    13,    14,   113,   113,
-   105,   117,   105,    70,   382,   105,   105,    24,    25,    26,
-   107,    28,   116,     4,    97,    90,   107,    27,    70,    70,
-    98,    38,    27,   108,    98,    42,   105,   107,     4,    46,
-   408,    84,    49,    50,    51,    52,    70,   106,   106,   105,
-   103,   112,   420,    60,    61,   110,   424,   108,    65,    66,
-    67,    68,    69,   107,   110,   114,   105,   107,   106,    76,
-   115,    78,    79,   104,   108,   108,     8,   105,    85,   108,
-    87,    13,    14,   108,   114,    92,    93,    94,    95,    96,
-   108,   113,     0,    25,     0,    13,     3,    26,   105,    56,
-    74,   115,   139,    65,   110,   237,   363,   155,    40,   352,
-   348,   230,    44,   427,   322,   213,   406,   258,    50,    51,
-    52,   147,   420,   412,    56,   408,   360,    -1,   305,    61,
-    -1,   185,    -1,   185,    66,    -1,    68,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    85,    -1,    87,    -1,    -1,    13,    14,
-    92,    -1,    94,    95,    96,    20,    -1,    -1,    -1,    24,
-    25,    26,    -1,    28,    29,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    38,    -1,    -1,    -1,    42,    -1,    -1,
-    -1,    46,    -1,    -1,    49,    50,    51,    52,    -1,    -1,
-    -1,    -1,    -1,    58,    -1,    60,    61,    -1,    -1,    -1,
-    65,    66,    67,    68,    69,    -1,    -1,    -1,    -1,    -1,
-    -1,    76,    -1,    78,    79,    80,    81,    -1,    -1,    -1,
-    85,    -1,    87,    13,    14,    -1,    -1,    92,    93,    94,
-    95,    96,    -1,    -1,    24,    25,    26,    -1,    28,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    38,    -1,
-    -1,    -1,    42,    -1,    -1,    -1,    46,    -1,    -1,    49,
-    50,    51,    52,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    60,    61,    -1,    -1,    -1,    65,    66,    67,    68,    69,
-    -1,    -1,    -1,    -1,    -1,    -1,    76,    -1,    78,    79,
-    -1,    -1,    -1,    -1,    -1,    85,    -1,    87,    13,    14,
-    -1,    -1,    92,    93,    94,    95,    96,    -1,    -1,    24,
-    25,    26,    -1,    28,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    38,    -1,    -1,    -1,    42,    -1,    -1,
-    -1,    46,    -1,    -1,    49,    50,    51,    52,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,    -1,    -1,
-    65,    66,    67,    68,    69,    -1,    -1,    -1,    -1,    -1,
-    -1,    76,    -1,    78,    79,    -1,    -1,    -1,    -1,    -1,
-    85,    -1,    87,    -1,    -1,    -1,    -1,    92,    93,    94,
-    95,    96
+     0,    82,   214,     3,   233,    13,   194,   195,     4,     8,
+   136,   221,   222,   223,     4,     8,     8,   227,   228,    15,
+    16,    17,     4,   135,     8,    15,    16,    17,   136,    37,
+     8,     9,    40,    15,    16,    17,    44,    37,     8,     9,
+    40,     8,    36,   147,    44,     8,    13,    14,    56,    36,
+   106,    31,     8,    20,     8,    83,    56,    13,    14,     8,
+     9,   321,    37,    12,     8,     9,    74,   346,    12,    83,
+    33,   281,    49,    83,    74,    14,    15,   337,    72,    33,
+   108,    56,   361,    14,    15,    72,    44,   104,    13,    14,
+   216,   301,   106,   219,   108,    37,   106,    55,   108,    99,
+   117,   213,   110,   184,   185,    36,   105,   115,   216,     9,
+   110,   219,   105,   239,   114,   115,   124,   113,   114,   348,
+   113,   113,   116,   113,   124,   107,   207,    22,   136,   107,
+   234,   113,   116,   113,   111,   135,   136,   107,    18,   108,
+     8,    72,   105,   110,   354,    13,    14,   147,   156,   157,
+   113,   105,   233,   107,   110,   155,   105,   157,   107,   113,
+   241,   105,     5,     6,     7,     8,     9,    10,    11,    12,
+    13,    14,   110,   111,   113,   317,   107,   242,   429,    60,
+   111,    49,   113,    78,    99,   106,    56,   252,   400,   440,
+   332,   333,    72,   335,     3,   116,    76,    92,   100,   101,
+   102,   103,   267,    15,    16,    48,   107,   215,   216,   111,
+   111,   219,   216,   294,   107,   219,   216,   405,   111,   219,
+   346,   302,    87,    66,   107,   233,     3,   235,   111,   237,
+    87,   239,   147,   241,   360,   361,    13,    14,    87,     6,
+   155,     8,     9,    10,    11,    12,    89,   109,    25,    26,
+    27,   251,    29,     8,     9,     8,    24,    12,    13,    14,
+    13,    14,    39,   106,    15,    16,    43,   348,   107,   350,
+    47,   336,   111,    50,    51,    52,    53,    13,    14,   107,
+   288,    48,   363,   111,    61,    62,    32,    33,    14,    66,
+    67,    68,    69,    70,   107,   303,    63,   305,   111,    42,
+    77,   107,    79,    80,   355,   111,   110,   358,   106,    86,
+   106,    88,    13,    14,    15,    16,    93,    94,    95,    96,
+    97,   116,    89,    84,   100,   101,   102,   103,     6,   106,
+     8,     9,    10,    11,    12,    13,    14,    84,   346,    74,
+   348,    54,    20,    84,   352,     3,   346,    15,    16,   394,
+   395,   116,   360,   361,     3,   363,    34,   107,   107,     9,
+   112,   361,   106,    14,   372,     3,   106,   112,     8,   106,
+    48,    49,    23,   112,   382,     6,   114,     8,     9,    10,
+    11,    12,    13,    14,   116,     6,    64,     8,     9,    10,
+    11,    12,   116,    44,    38,    46,   106,    71,   106,   106,
+   408,     8,   108,    34,    55,    83,    13,    14,   108,   113,
+     4,    89,   420,    98,    91,    28,   424,    48,    49,    26,
+    98,   109,    28,    71,    71,   108,    99,    48,   106,    99,
+   108,   106,     4,    64,    41,   115,    71,   108,    45,    85,
+   107,   107,    63,   106,    51,    52,    53,   111,   109,   104,
+    57,   108,    83,   106,   106,    62,   118,   117,    89,     0,
+    67,   117,    69,   105,   107,     0,   111,    98,    89,     3,
+    77,    13,   109,   109,   139,   106,   109,   108,    26,    86,
+   109,    88,   109,    13,    14,    56,    93,    74,    95,    96,
+    97,    21,   116,   115,   110,    25,    26,    27,    65,    29,
+    30,   155,   363,   237,   352,   230,   348,   322,   428,    39,
+   213,   420,   406,    43,   412,   147,   185,    47,   408,   360,
+    50,    51,    52,    53,   305,   258,   185,    -1,    -1,    59,
+    -1,    61,    62,    -1,    -1,    -1,    66,    67,    68,    69,
+    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    79,
+    80,    81,    82,    -1,    -1,    -1,    86,    -1,    88,    13,
+    14,    -1,    -1,    93,    94,    95,    96,    97,    -1,    -1,
+    -1,    25,    26,    27,    -1,    29,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    43,
+    -1,    -1,    -1,    47,    -1,    -1,    50,    51,    52,    53,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    61,    62,    -1,
+    -1,    -1,    66,    67,    68,    69,    70,    -1,    -1,    -1,
+    -1,    -1,    -1,    77,    -1,    79,    80,    -1,    -1,    -1,
+    -1,    -1,    86,    -1,    88,    13,    14,    -1,    -1,    93,
+    94,    95,    96,    97,    -1,    -1,    -1,    25,    26,    27,
+    -1,    29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    39,    -1,    -1,    -1,    43,    -1,    -1,    -1,    47,
+    -1,    -1,    50,    51,    52,    53,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    61,    62,    -1,    -1,    -1,    66,    67,
+    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
+    -1,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    -1,
+    88,    -1,    -1,    -1,    -1,    93,    94,    95,    96,    97
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 #line 3 "/usr/share/bison.simple"
@@ -1361,13 +1355,13 @@
   switch (yyn) {
 
 case 1:
-#line 323 "asn1p_y.y"
+#line 324 "asn1p_y.y"
 {
 		*(void **)param = yyvsp[0].a_grammar;
 	;
     break;}
 case 2:
-#line 329 "asn1p_y.y"
+#line 330 "asn1p_y.y"
 {
 		yyval.a_grammar = asn1p_new();
 		checkmem(yyval.a_grammar);
@@ -1375,14 +1369,14 @@
 	;
     break;}
 case 3:
-#line 334 "asn1p_y.y"
+#line 335 "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 355 "asn1p_y.y"
+#line 356 "asn1p_y.y"
 {
 
 		if(yyvsp[-1].a_module) {
@@ -1399,27 +1393,27 @@
 	;
     break;}
 case 5:
-#line 376 "asn1p_y.y"
+#line 377 "asn1p_y.y"
 { yyval.a_oid = 0; ;
     break;}
 case 6:
-#line 377 "asn1p_y.y"
+#line 378 "asn1p_y.y"
 { yyval.a_oid = yyvsp[0].a_oid; ;
     break;}
 case 7:
-#line 381 "asn1p_y.y"
+#line 382 "asn1p_y.y"
 {
 		yyval.a_oid = yyvsp[-1].a_oid;
 	;
     break;}
 case 8:
-#line 384 "asn1p_y.y"
+#line 385 "asn1p_y.y"
 {
 		yyval.a_oid = 0;
 	;
     break;}
 case 9:
-#line 390 "asn1p_y.y"
+#line 391 "asn1p_y.y"
 {
 		yyval.a_oid = asn1p_oid_new();
 		asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
@@ -1428,7 +1422,7 @@
 	;
     break;}
 case 10:
-#line 396 "asn1p_y.y"
+#line 397 "asn1p_y.y"
 {
 		yyval.a_oid = yyvsp[-1].a_oid;
 		asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
@@ -1437,74 +1431,74 @@
 	;
     break;}
 case 11:
-#line 405 "asn1p_y.y"
+#line 406 "asn1p_y.y"
 {					/* iso */
 		yyval.a_oid_arc.name = yyvsp[0].tv_str;
 		yyval.a_oid_arc.number = -1;
 	;
     break;}
 case 12:
-#line 409 "asn1p_y.y"
+#line 410 "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 413 "asn1p_y.y"
+#line 414 "asn1p_y.y"
 {					/* 1 */
 		yyval.a_oid_arc.name = 0;
 		yyval.a_oid_arc.number = yyvsp[0].a_int;
 	;
     break;}
 case 14:
-#line 423 "asn1p_y.y"
+#line 424 "asn1p_y.y"
 { yyval.a_module_flags = MSF_NOFLAGS; ;
     break;}
 case 15:
-#line 424 "asn1p_y.y"
+#line 425 "asn1p_y.y"
 {
 		yyval.a_module_flags = yyvsp[0].a_module_flags;
 	;
     break;}
 case 16:
-#line 433 "asn1p_y.y"
+#line 434 "asn1p_y.y"
 {
 		yyval.a_module_flags = yyvsp[0].a_module_flags;
 	;
     break;}
 case 17:
-#line 436 "asn1p_y.y"
+#line 437 "asn1p_y.y"
 {
 		yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
 	;
     break;}
 case 18:
-#line 445 "asn1p_y.y"
+#line 446 "asn1p_y.y"
 {
 		yyval.a_module_flags = MSF_EXPLICIT_TAGS;
 	;
     break;}
 case 19:
-#line 448 "asn1p_y.y"
+#line 449 "asn1p_y.y"
 {
 		yyval.a_module_flags = MSF_IMPLICIT_TAGS;
 	;
     break;}
 case 20:
-#line 451 "asn1p_y.y"
+#line 452 "asn1p_y.y"
 {
 		yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
 	;
     break;}
 case 21:
-#line 454 "asn1p_y.y"
+#line 455 "asn1p_y.y"
 {
 		yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
 	;
     break;}
 case 22:
-#line 458 "asn1p_y.y"
+#line 459 "asn1p_y.y"
 {
 		/* X.680Amd1 specifies TAG and XER */
 		if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
@@ -1522,23 +1516,23 @@
 	;
     break;}
 case 23:
-#line 479 "asn1p_y.y"
+#line 480 "asn1p_y.y"
 { yyval.a_module = 0; ;
     break;}
 case 24:
-#line 480 "asn1p_y.y"
+#line 481 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[0].a_module;
 	;
     break;}
 case 25:
-#line 489 "asn1p_y.y"
+#line 490 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[0].a_module;
 	;
     break;}
 case 26:
-#line 492 "asn1p_y.y"
+#line 493 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[-1].a_module;
 
@@ -1568,13 +1562,13 @@
 	;
     break;}
 case 27:
-#line 525 "asn1p_y.y"
+#line 526 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[0].a_module;
 	;
     break;}
 case 28:
-#line 528 "asn1p_y.y"
+#line 529 "asn1p_y.y"
 {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -1586,7 +1580,7 @@
 	;
     break;}
 case 29:
-#line 537 "asn1p_y.y"
+#line 538 "asn1p_y.y"
 {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -1596,7 +1590,7 @@
 	;
     break;}
 case 30:
-#line 544 "asn1p_y.y"
+#line 545 "asn1p_y.y"
 {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -1606,7 +1600,7 @@
 	;
     break;}
 case 31:
-#line 557 "asn1p_y.y"
+#line 558 "asn1p_y.y"
 {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -1616,11 +1610,11 @@
 	;
     break;}
 case 32:
-#line 565 "asn1p_y.y"
+#line 566 "asn1p_y.y"
 { asn1p_lexer_hack_push_encoding_control(); ;
     break;}
 case 33:
-#line 566 "asn1p_y.y"
+#line 567 "asn1p_y.y"
 {
 		fprintf(stderr,
 			"WARNING: ENCODING-CONTROL %s "
@@ -1631,7 +1625,7 @@
 	;
     break;}
 case 34:
-#line 578 "asn1p_y.y"
+#line 579 "asn1p_y.y"
 {
 		return yyerror(
 			"Attempt to redefine a standard basic string type, "
@@ -1639,7 +1633,7 @@
 	;
     break;}
 case 35:
-#line 591 "asn1p_y.y"
+#line 592 "asn1p_y.y"
 {
 		if(!saved_aid && 0)
 			return yyerror("Unterminated IMPORTS FROM, "
@@ -1649,13 +1643,13 @@
 	;
     break;}
 case 36:
-#line 601 "asn1p_y.y"
+#line 602 "asn1p_y.y"
 {
 		return yyerror("Empty IMPORTS list");
 	;
     break;}
 case 37:
-#line 607 "asn1p_y.y"
+#line 608 "asn1p_y.y"
 {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -1663,22 +1657,22 @@
 	;
     break;}
 case 38:
-#line 612 "asn1p_y.y"
+#line 613 "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 619 "asn1p_y.y"
+#line 620 "asn1p_y.y"
 { memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); ;
     break;}
 case 40:
-#line 620 "asn1p_y.y"
+#line 621 "asn1p_y.y"
 { yyval.a_aid.oid = yyvsp[0].a_oid; ;
     break;}
 case 41:
-#line 624 "asn1p_y.y"
+#line 625 "asn1p_y.y"
 {
 		yyval.a_xports = yyvsp[-3].a_xports;
 		yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
@@ -1689,7 +1683,7 @@
 	;
     break;}
 case 42:
-#line 635 "asn1p_y.y"
+#line 636 "asn1p_y.y"
 {
 		yyval.a_xports = asn1p_xports_new();
 		checkmem(yyval.a_xports);
@@ -1697,14 +1691,14 @@
 	;
     break;}
 case 43:
-#line 640 "asn1p_y.y"
+#line 641 "asn1p_y.y"
 {
 		yyval.a_xports = yyvsp[-2].a_xports;
 		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
 	;
     break;}
 case 44:
-#line 647 "asn1p_y.y"
+#line 648 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1713,7 +1707,7 @@
 	;
     break;}
 case 45:
-#line 653 "asn1p_y.y"
+#line 654 "asn1p_y.y"
 {		/* Completely equivalent to above */
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1722,7 +1716,7 @@
 	;
     break;}
 case 46:
-#line 659 "asn1p_y.y"
+#line 660 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1731,19 +1725,19 @@
 	;
     break;}
 case 47:
-#line 668 "asn1p_y.y"
+#line 669 "asn1p_y.y"
 {
 		yyval.a_xports = yyvsp[-1].a_xports;
 	;
     break;}
 case 48:
-#line 671 "asn1p_y.y"
+#line 672 "asn1p_y.y"
 {
 		yyval.a_xports = 0;
 	;
     break;}
 case 49:
-#line 674 "asn1p_y.y"
+#line 675 "asn1p_y.y"
 {
 		/* Empty EXPORTS clause effectively prohibits export. */
 		yyval.a_xports = asn1p_xports_new();
@@ -1751,7 +1745,7 @@
 	;
     break;}
 case 50:
-#line 682 "asn1p_y.y"
+#line 683 "asn1p_y.y"
 {
 		yyval.a_xports = asn1p_xports_new();
 		assert(yyval.a_xports);
@@ -1759,14 +1753,14 @@
 	;
     break;}
 case 51:
-#line 687 "asn1p_y.y"
+#line 688 "asn1p_y.y"
 {
 		yyval.a_xports = yyvsp[-2].a_xports;
 		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
 	;
     break;}
 case 52:
-#line 694 "asn1p_y.y"
+#line 695 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1775,7 +1769,7 @@
 	;
     break;}
 case 53:
-#line 700 "asn1p_y.y"
+#line 701 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1784,7 +1778,7 @@
 	;
     break;}
 case 54:
-#line 706 "asn1p_y.y"
+#line 707 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1793,11 +1787,11 @@
 	;
     break;}
 case 55:
-#line 717 "asn1p_y.y"
+#line 718 "asn1p_y.y"
 { asn1p_lexer_hack_push_opaque_state(); ;
     break;}
 case 56:
-#line 717 "asn1p_y.y"
+#line 718 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-4].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -1807,7 +1801,7 @@
 	;
     break;}
 case 57:
-#line 727 "asn1p_y.y"
+#line 728 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1817,7 +1811,7 @@
 	;
     break;}
 case 58:
-#line 734 "asn1p_y.y"
+#line 735 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1826,7 +1820,7 @@
 	;
     break;}
 case 59:
-#line 752 "asn1p_y.y"
+#line 753 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -1835,7 +1829,7 @@
 	;
     break;}
 case 60:
-#line 758 "asn1p_y.y"
+#line 759 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -1844,7 +1838,7 @@
 	;
     break;}
 case 61:
-#line 774 "asn1p_y.y"
+#line 775 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -1854,7 +1848,7 @@
 	;
     break;}
 case 62:
-#line 784 "asn1p_y.y"
+#line 785 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_plist = asn1p_paramlist_new(yylineno);
@@ -1866,7 +1860,7 @@
 	;
     break;}
 case 63:
-#line 793 "asn1p_y.y"
+#line 794 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_plist = yyvsp[-2].a_plist;
@@ -1877,14 +1871,14 @@
 	;
     break;}
 case 64:
-#line 804 "asn1p_y.y"
+#line 805 "asn1p_y.y"
 {
 		yyval.a_parg.governor = NULL;
 		yyval.a_parg.argument = yyvsp[0].tv_str;
 	;
     break;}
 case 65:
-#line 808 "asn1p_y.y"
+#line 809 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_parg.governor = asn1p_ref_new(yylineno);
@@ -1894,7 +1888,7 @@
 	;
     break;}
 case 66:
-#line 815 "asn1p_y.y"
+#line 816 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_parg.governor = asn1p_ref_new(yylineno);
@@ -1904,7 +1898,7 @@
 	;
     break;}
 case 67:
-#line 822 "asn1p_y.y"
+#line 823 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_parg.governor = asn1p_ref_new(yylineno);
@@ -1915,7 +1909,7 @@
 	;
     break;}
 case 68:
-#line 833 "asn1p_y.y"
+#line 834 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1923,20 +1917,20 @@
 	;
     break;}
 case 69:
-#line 838 "asn1p_y.y"
+#line 839 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
 	;
     break;}
 case 70:
-#line 845 "asn1p_y.y"
+#line 846 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 	;
     break;}
 case 71:
-#line 848 "asn1p_y.y"
+#line 849 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1946,15 +1940,15 @@
 	;
     break;}
 case 72:
-#line 872 "asn1p_y.y"
+#line 873 "asn1p_y.y"
 { yyval.a_expr = asn1p_expr_new(yylineno); ;
     break;}
 case 73:
-#line 873 "asn1p_y.y"
+#line 874 "asn1p_y.y"
 { yyval.a_expr = yyvsp[0].a_expr; ;
     break;}
 case 74:
-#line 876 "asn1p_y.y"
+#line 877 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1962,14 +1956,14 @@
 	;
     break;}
 case 75:
-#line 881 "asn1p_y.y"
+#line 882 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
 	;
     break;}
 case 76:
-#line 888 "asn1p_y.y"
+#line 889 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -1979,7 +1973,7 @@
 	;
     break;}
 case 77:
-#line 895 "asn1p_y.y"
+#line 896 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
@@ -1988,7 +1982,7 @@
 	;
     break;}
 case 78:
-#line 901 "asn1p_y.y"
+#line 902 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1998,13 +1992,13 @@
 	;
     break;}
 case 79:
-#line 908 "asn1p_y.y"
+#line 909 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 	;
     break;}
 case 80:
-#line 914 "asn1p_y.y"
+#line 915 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2012,14 +2006,14 @@
 	;
     break;}
 case 81:
-#line 919 "asn1p_y.y"
+#line 920 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
 	;
     break;}
 case 82:
-#line 926 "asn1p_y.y"
+#line 927 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -2027,20 +2021,20 @@
 	;
     break;}
 case 83:
-#line 931 "asn1p_y.y"
+#line 932 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 	;
     break;}
 case 84:
-#line 934 "asn1p_y.y"
+#line 935 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		_fixup_anonymous_identifier(yyval.a_expr);
 	;
     break;}
 case 85:
-#line 941 "asn1p_y.y"
+#line 942 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		checkmem(yyval.a_expr);
@@ -2050,15 +2044,15 @@
 	;
     break;}
 case 86:
-#line 951 "asn1p_y.y"
+#line 952 "asn1p_y.y"
 { yyval.a_int = 0; ;
     break;}
 case 87:
-#line 952 "asn1p_y.y"
+#line 953 "asn1p_y.y"
 { yyval.a_int = 1; ;
     break;}
 case 88:
-#line 956 "asn1p_y.y"
+#line 957 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2068,14 +2062,14 @@
 	;
     break;}
 case 89:
-#line 963 "asn1p_y.y"
+#line 964 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
 	;
     break;}
 case 90:
-#line 973 "asn1p_y.y"
+#line 974 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2086,7 +2080,7 @@
 	;
     break;}
 case 91:
-#line 983 "asn1p_y.y"
+#line 984 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
@@ -2098,7 +2092,7 @@
 	;
     break;}
 case 92:
-#line 994 "asn1p_y.y"
+#line 995 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -2109,7 +2103,7 @@
 	;
     break;}
 case 93:
-#line 1004 "asn1p_y.y"
+#line 1005 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2121,7 +2115,7 @@
 	;
     break;}
 case 94:
-#line 1015 "asn1p_y.y"
+#line 1016 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -2132,7 +2126,7 @@
 	;
     break;}
 case 95:
-#line 1025 "asn1p_y.y"
+#line 1026 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2144,7 +2138,7 @@
 	;
     break;}
 case 96:
-#line 1036 "asn1p_y.y"
+#line 1037 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2156,47 +2150,53 @@
 	;
     break;}
 case 97:
-#line 1048 "asn1p_y.y"
+#line 1049 "asn1p_y.y"
 { yyval.a_wsynt = 0; ;
     break;}
 case 98:
-#line 1049 "asn1p_y.y"
+#line 1050 "asn1p_y.y"
 {
 		yyval.a_wsynt = yyvsp[0].a_wsynt;
 	;
     break;}
 case 99:
-#line 1056 "asn1p_y.y"
+#line 1057 "asn1p_y.y"
 { asn1p_lexer_hack_enable_with_syntax(); ;
     break;}
 case 100:
-#line 1058 "asn1p_y.y"
+#line 1059 "asn1p_y.y"
 {
 		yyval.a_wsynt = yyvsp[-1].a_wsynt;
 	;
     break;}
 case 101:
-#line 1064 "asn1p_y.y"
+#line 1065 "asn1p_y.y"
 {
 		yyval.a_wsynt = asn1p_wsyntx_new();
 		TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
 	;
     break;}
 case 102:
-#line 1068 "asn1p_y.y"
+#line 1069 "asn1p_y.y"
 {
 		yyval.a_wsynt = yyvsp[-1].a_wsynt;
 		TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
 	;
     break;}
 case 103:
-#line 1075 "asn1p_y.y"
+#line 1076 "asn1p_y.y"
 {
 		yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 	;
     break;}
 case 104:
-#line 1078 "asn1p_y.y"
+#line 1079 "asn1p_y.y"
+{
+		yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_str, strlen(yyvsp[0].tv_str), 0);
+	;
+    break;}
+case 105:
+#line 1082 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -2207,43 +2207,49 @@
 		yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
 	;
     break;}
-case 105:
-#line 1090 "asn1p_y.y"
-{
-		yyval.a_expr = asn1p_expr_new(yylineno);
-		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;
-	;
-    break;}
 case 106:
-#line 1098 "asn1p_y.y"
+#line 1091 "asn1p_y.y"
 {
-		yyval.a_expr = asn1p_expr_new(yylineno);
-		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;
+		yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt);
 	;
     break;}
 case 107:
-#line 1107 "asn1p_y.y"
+#line 1097 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		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 108:
-#line 1119 "asn1p_y.y"
+#line 1105 "asn1p_y.y"
+{
+		yyval.a_expr = asn1p_expr_new(yylineno);
+		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 109:
+#line 1114 "asn1p_y.y"
+{
+		yyval.a_expr = asn1p_expr_new(yylineno);
+		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 110:
+#line 1126 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		yyval.a_expr->tag = yyvsp[-2].a_tag;
@@ -2264,15 +2270,15 @@
 		}
 	;
     break;}
-case 109:
-#line 1141 "asn1p_y.y"
+case 111:
+#line 1148 "asn1p_y.y"
 {
 		yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
 		asn1p_as_pointer = 0;
 	;
     break;}
-case 110:
-#line 1148 "asn1p_y.y"
+case 112:
+#line 1155 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
@@ -2290,14 +2296,14 @@
 		}
 	;
     break;}
-case 111:
-#line 1167 "asn1p_y.y"
+case 113:
+#line 1174 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 	;
     break;}
-case 112:
-#line 1170 "asn1p_y.y"
+case 114:
+#line 1177 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->expr_type == A1TC_INVALID);
@@ -2305,8 +2311,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 113:
-#line 1176 "asn1p_y.y"
+case 115:
+#line 1183 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->expr_type == A1TC_INVALID);
@@ -2314,8 +2320,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 114:
-#line 1182 "asn1p_y.y"
+case 116:
+#line 1189 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->expr_type == A1TC_INVALID);
@@ -2323,8 +2329,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 115:
-#line 1188 "asn1p_y.y"
+case 117:
+#line 1195 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2336,8 +2342,8 @@
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
 	;
     break;}
-case 116:
-#line 1198 "asn1p_y.y"
+case 118:
+#line 1205 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2349,8 +2355,8 @@
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
 	;
     break;}
-case 117:
-#line 1208 "asn1p_y.y"
+case 119:
+#line 1215 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2358,8 +2364,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 118:
-#line 1214 "asn1p_y.y"
+case 120:
+#line 1221 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_expr = asn1p_expr_new(yylineno);
@@ -2372,8 +2378,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 119:
-#line 1228 "asn1p_y.y"
+case 121:
+#line 1235 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_expr = yyvsp[-1].a_expr;
@@ -2389,8 +2395,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 120:
-#line 1252 "asn1p_y.y"
+case 122:
+#line 1259 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2399,8 +2405,8 @@
 		yyval.a_expr->meta_type = AMT_TYPEREF;
 	;
     break;}
-case 121:
-#line 1259 "asn1p_y.y"
+case 123:
+#line 1266 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2409,8 +2415,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 122:
-#line 1274 "asn1p_y.y"
+case 124:
+#line 1281 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2420,34 +2426,34 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 123:
-#line 1282 "asn1p_y.y"
-{
-		int ret;
-		yyval.a_ref = asn1p_ref_new(yylineno);
-		checkmem(yyval.a_ref);
-		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
-		checkmem(ret == 0);
-		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
-		checkmem(ret == 0);
-		free(yyvsp[-2].tv_str);
-	;
-    break;}
-case 124:
-#line 1292 "asn1p_y.y"
-{
-		int ret;
-		yyval.a_ref = asn1p_ref_new(yylineno);
-		checkmem(yyval.a_ref);
-		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
-		checkmem(ret == 0);
-		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
-		checkmem(ret == 0);
-		free(yyvsp[-2].tv_str);
-	;
-    break;}
 case 125:
-#line 1302 "asn1p_y.y"
+#line 1289 "asn1p_y.y"
+{
+		int ret;
+		yyval.a_ref = asn1p_ref_new(yylineno);
+		checkmem(yyval.a_ref);
+		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
+		checkmem(ret == 0);
+		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
+		checkmem(ret == 0);
+		free(yyvsp[-2].tv_str);
+	;
+    break;}
+case 126:
+#line 1299 "asn1p_y.y"
+{
+		int ret;
+		yyval.a_ref = asn1p_ref_new(yylineno);
+		checkmem(yyval.a_ref);
+		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
+		checkmem(ret == 0);
+		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
+		checkmem(ret == 0);
+		free(yyvsp[-2].tv_str);
+	;
+    break;}
+case 127:
+#line 1309 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2459,8 +2465,8 @@
 		free(yyvsp[-2].tv_str);
 	;
     break;}
-case 126:
-#line 1312 "asn1p_y.y"
+case 128:
+#line 1319 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2470,8 +2476,8 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 127:
-#line 1320 "asn1p_y.y"
+case 129:
+#line 1327 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = yyvsp[0].a_ref;
@@ -2492,8 +2498,8 @@
 		}
 	;
     break;}
-case 128:
-#line 1342 "asn1p_y.y"
+case 130:
+#line 1349 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2503,8 +2509,8 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 129:
-#line 1350 "asn1p_y.y"
+case 131:
+#line 1357 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = yyvsp[-2].a_ref;
@@ -2513,50 +2519,50 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 132:
-#line 1364 "asn1p_y.y"
+case 134:
+#line 1371 "asn1p_y.y"
 {
 		yyval.a_refcomp.lex_type = RLT_AmpUppercase;
 		yyval.a_refcomp.name = yyvsp[0].tv_str;
 	;
     break;}
-case 133:
-#line 1369 "asn1p_y.y"
+case 135:
+#line 1376 "asn1p_y.y"
 {
 		yyval.a_refcomp.lex_type = RLT_Amplowercase;
 		yyval.a_refcomp.name = yyvsp[0].tv_str;
 	;
     break;}
-case 134:
-#line 1378 "asn1p_y.y"
+case 136:
+#line 1385 "asn1p_y.y"
 {
 		yyval.a_ref = asn1p_ref_new(yylineno);
 		asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
 	;
     break;}
-case 135:
-#line 1382 "asn1p_y.y"
+case 137:
+#line 1389 "asn1p_y.y"
 {
 		yyval.a_ref = yyval.a_ref;
 		asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
 	;
     break;}
-case 136:
-#line 1386 "asn1p_y.y"
+case 138:
+#line 1393 "asn1p_y.y"
 {
 		yyval.a_ref = yyval.a_ref;
 		asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
 	;
     break;}
-case 137:
-#line 1393 "asn1p_y.y"
+case 139:
+#line 1400 "asn1p_y.y"
 {
 		yyval.a_ref = asn1p_ref_new(yylineno);
 		asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
 	;
     break;}
-case 138:
-#line 1413 "asn1p_y.y"
+case 140:
+#line 1420 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		assert(yyval.a_expr->Identifier == NULL);
@@ -2565,8 +2571,8 @@
 		yyval.a_expr->value = yyvsp[0].a_value;
 	;
     break;}
-case 139:
-#line 1423 "asn1p_y.y"
+case 141:
+#line 1430 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
@@ -2575,76 +2581,76 @@
 		yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
 	;
     break;}
-case 140:
-#line 1430 "asn1p_y.y"
+case 142:
+#line 1437 "asn1p_y.y"
 { asn1p_lexer_hack_push_opaque_state(); ;
     break;}
-case 141:
-#line 1430 "asn1p_y.y"
+case 143:
+#line 1437 "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 142:
-#line 1435 "asn1p_y.y"
+case 144:
+#line 1442 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_NULL;
 	;
     break;}
-case 143:
-#line 1440 "asn1p_y.y"
+case 145:
+#line 1447 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_FALSE;
 	;
     break;}
-case 144:
-#line 1445 "asn1p_y.y"
+case 146:
+#line 1452 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_TRUE;
 	;
     break;}
-case 145:
-#line 1450 "asn1p_y.y"
+case 147:
+#line 1457 "asn1p_y.y"
 {
 		yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
 		checkmem(yyval.a_value);
 	;
     break;}
-case 146:
-#line 1454 "asn1p_y.y"
+case 148:
+#line 1461 "asn1p_y.y"
 {
 		yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
 		checkmem(yyval.a_value);
 	;
     break;}
-case 147:
-#line 1458 "asn1p_y.y"
+case 149:
+#line 1465 "asn1p_y.y"
 {
 		yyval.a_value = yyval.a_value;
 	;
     break;}
-case 148:
-#line 1461 "asn1p_y.y"
-{
-		yyval.a_value = yyvsp[0].a_value;
-	;
-    break;}
-case 149:
-#line 1464 "asn1p_y.y"
-{
-		yyval.a_value = yyvsp[0].a_value;
-	;
-    break;}
 case 150:
-#line 1470 "asn1p_y.y"
+#line 1468 "asn1p_y.y"
+{
+		yyval.a_value = yyvsp[0].a_value;
+	;
+    break;}
+case 151:
+#line 1471 "asn1p_y.y"
+{
+		yyval.a_value = yyvsp[0].a_value;
+	;
+    break;}
+case 152:
+#line 1477 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -2657,8 +2663,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 151:
-#line 1481 "asn1p_y.y"
+case 153:
+#line 1488 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -2674,31 +2680,31 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 152:
-#line 1499 "asn1p_y.y"
+case 154:
+#line 1506 "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 153:
-#line 1503 "asn1p_y.y"
+case 155:
+#line 1510 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_TUPLE;
 	;
     break;}
-case 154:
-#line 1508 "asn1p_y.y"
+case 156:
+#line 1515 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_QUADRUPLE;
 	;
     break;}
-case 155:
-#line 1542 "asn1p_y.y"
+case 157:
+#line 1549 "asn1p_y.y"
 {
 		yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
 		yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
@@ -2709,8 +2715,8 @@
 		free(yyvsp[0].tv_opaque.buf);
 	;
     break;}
-case 156:
-#line 1551 "asn1p_y.y"
+case 158:
+#line 1558 "asn1p_y.y"
 {
 		int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
 		char *p = malloc(newsize + 1);
@@ -2724,72 +2730,72 @@
 		yyval.tv_opaque.len = newsize;
 	;
     break;}
-case 157:
-#line 1566 "asn1p_y.y"
+case 159:
+#line 1573 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_BOOLEAN; ;
     break;}
-case 158:
-#line 1567 "asn1p_y.y"
+case 160:
+#line 1574 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_NULL; ;
     break;}
-case 159:
-#line 1568 "asn1p_y.y"
+case 161:
+#line 1575 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_REAL; ;
     break;}
-case 160:
-#line 1569 "asn1p_y.y"
-{ yyval.a_type = yyvsp[0].a_type; ;
-    break;}
-case 161:
-#line 1570 "asn1p_y.y"
-{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
-    break;}
 case 162:
-#line 1571 "asn1p_y.y"
-{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
+#line 1576 "asn1p_y.y"
+{ yyval.a_type = yyvsp[0].a_type; ;
     break;}
 case 163:
-#line 1572 "asn1p_y.y"
-{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
+#line 1577 "asn1p_y.y"
+{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
     break;}
 case 164:
-#line 1573 "asn1p_y.y"
-{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
+#line 1578 "asn1p_y.y"
+{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
     break;}
 case 165:
-#line 1574 "asn1p_y.y"
-{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
+#line 1579 "asn1p_y.y"
+{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
     break;}
 case 166:
-#line 1575 "asn1p_y.y"
-{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
+#line 1580 "asn1p_y.y"
+{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
     break;}
 case 167:
-#line 1576 "asn1p_y.y"
-{ yyval.a_type = ASN_BASIC_UTCTime; ;
+#line 1581 "asn1p_y.y"
+{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
     break;}
 case 168:
-#line 1577 "asn1p_y.y"
-{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
+#line 1582 "asn1p_y.y"
+{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
     break;}
 case 169:
-#line 1578 "asn1p_y.y"
-{ yyval.a_type = yyvsp[0].a_type; ;
+#line 1583 "asn1p_y.y"
+{ yyval.a_type = ASN_BASIC_UTCTime; ;
     break;}
 case 170:
-#line 1585 "asn1p_y.y"
-{ yyval.a_type = ASN_BASIC_INTEGER; ;
+#line 1584 "asn1p_y.y"
+{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
     break;}
 case 171:
-#line 1586 "asn1p_y.y"
-{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
+#line 1585 "asn1p_y.y"
+{ yyval.a_type = yyvsp[0].a_type; ;
     break;}
 case 172:
-#line 1587 "asn1p_y.y"
-{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
+#line 1592 "asn1p_y.y"
+{ yyval.a_type = ASN_BASIC_INTEGER; ;
     break;}
 case 173:
-#line 1591 "asn1p_y.y"
+#line 1593 "asn1p_y.y"
+{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
+    break;}
+case 174:
+#line 1594 "asn1p_y.y"
+{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
+    break;}
+case 175:
+#line 1598 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2797,8 +2803,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 174:
-#line 1597 "asn1p_y.y"
+case 176:
+#line 1604 "asn1p_y.y"
 {
 		if(yyvsp[0].a_expr) {
 			yyval.a_expr = yyvsp[0].a_expr;
@@ -2810,92 +2816,92 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 175:
-#line 1610 "asn1p_y.y"
+case 177:
+#line 1617 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_BMPString; ;
     break;}
-case 176:
-#line 1611 "asn1p_y.y"
+case 178:
+#line 1618 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_GeneralString;
 		fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
 	;
     break;}
-case 177:
-#line 1615 "asn1p_y.y"
+case 179:
+#line 1622 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_GraphicString;
 		fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
 	;
     break;}
-case 178:
-#line 1619 "asn1p_y.y"
+case 180:
+#line 1626 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_IA5String; ;
     break;}
-case 179:
-#line 1620 "asn1p_y.y"
+case 181:
+#line 1627 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_ISO646String; ;
     break;}
-case 180:
-#line 1621 "asn1p_y.y"
+case 182:
+#line 1628 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_NumericString; ;
     break;}
-case 181:
-#line 1622 "asn1p_y.y"
+case 183:
+#line 1629 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_PrintableString; ;
     break;}
-case 182:
-#line 1623 "asn1p_y.y"
+case 184:
+#line 1630 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_T61String;
 		fprintf(stderr, "WARNING: T61String is not fully supported\n");
 	;
     break;}
-case 183:
-#line 1627 "asn1p_y.y"
+case 185:
+#line 1634 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_TeletexString; ;
     break;}
-case 184:
-#line 1628 "asn1p_y.y"
+case 186:
+#line 1635 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_UniversalString; ;
     break;}
-case 185:
-#line 1629 "asn1p_y.y"
+case 187:
+#line 1636 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_UTF8String; ;
     break;}
-case 186:
-#line 1630 "asn1p_y.y"
+case 188:
+#line 1637 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_VideotexString;
 		fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
 	;
     break;}
-case 187:
-#line 1634 "asn1p_y.y"
+case 189:
+#line 1641 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_VisibleString; ;
     break;}
-case 188:
-#line 1635 "asn1p_y.y"
+case 190:
+#line 1642 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_ObjectDescriptor; ;
     break;}
-case 194:
-#line 1647 "asn1p_y.y"
+case 196:
+#line 1654 "asn1p_y.y"
 { yyval.a_constr = 0; ;
     break;}
-case 195:
-#line 1648 "asn1p_y.y"
+case 197:
+#line 1655 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
-case 196:
-#line 1654 "asn1p_y.y"
+case 198:
+#line 1661 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
 	;
     break;}
-case 197:
-#line 1657 "asn1p_y.y"
+case 199:
+#line 1664 "asn1p_y.y"
 {
 		/*
 		 * This is a special case, for compatibility purposes.
@@ -2904,26 +2910,26 @@
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
 	;
     break;}
-case 198:
-#line 1667 "asn1p_y.y"
+case 200:
+#line 1674 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[-1].a_constr;
 	;
     break;}
-case 199:
-#line 1670 "asn1p_y.y"
+case 201:
+#line 1677 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
 	;
     break;}
-case 200:
-#line 1676 "asn1p_y.y"
+case 202:
+#line 1683 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
-case 201:
-#line 1679 "asn1p_y.y"
+case 203:
+#line 1686 "asn1p_y.y"
 {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -2931,8 +2937,8 @@
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
 	;
     break;}
-case 202:
-#line 1685 "asn1p_y.y"
+case 204:
+#line 1692 "asn1p_y.y"
 {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -2942,38 +2948,38 @@
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
 	;
     break;}
-case 203:
-#line 1696 "asn1p_y.y"
+case 205:
+#line 1703 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
-case 204:
-#line 1699 "asn1p_y.y"
+case 206:
+#line 1706 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
 	;
     break;}
-case 205:
-#line 1702 "asn1p_y.y"
+case 207:
+#line 1709 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
-case 206:
-#line 1705 "asn1p_y.y"
+case 208:
+#line 1712 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
-case 207:
-#line 1708 "asn1p_y.y"
+case 209:
+#line 1715 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
-case 208:
-#line 1714 "asn1p_y.y"
+case 210:
+#line 1721 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_constr = asn1p_constraint_new(yylineno);
@@ -2983,8 +2989,8 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 209:
-#line 1722 "asn1p_y.y"
+case 211:
+#line 1729 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_constr = asn1p_constraint_new(yylineno);
@@ -2994,8 +3000,8 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 210:
-#line 1730 "asn1p_y.y"
+case 212:
+#line 1737 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3003,8 +3009,8 @@
 		yyval.a_constr->value = yyvsp[0].a_value;
 	;
     break;}
-case 211:
-#line 1736 "asn1p_y.y"
+case 213:
+#line 1743 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3012,29 +3018,29 @@
 		yyval.a_constr->containedSubtype = yyvsp[0].a_value;
 	;
     break;}
-case 212:
-#line 1742 "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 213:
+case 214:
 #line 1749 "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 215:
+#line 1756 "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 214:
-#line 1757 "asn1p_y.y"
+case 216:
+#line 1764 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3044,8 +3050,8 @@
 		yyval.a_constr->range_stop->type = ATV_MAX;
 	;
     break;}
-case 215:
-#line 1765 "asn1p_y.y"
+case 217:
+#line 1772 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3056,24 +3062,24 @@
 		yyval.a_constr->range_stop->type = ATV_MAX;
 	;
     break;}
-case 216:
-#line 1774 "asn1p_y.y"
-{
-		yyval.a_constr = yyvsp[0].a_constr;
-	;
-    break;}
-case 217:
-#line 1777 "asn1p_y.y"
-{
-		yyval.a_constr = yyvsp[0].a_constr;
-	;
-    break;}
 case 218:
 #line 1781 "asn1p_y.y"
-{ asn1p_lexer_hack_push_opaque_state(); ;
+{
+		yyval.a_constr = yyvsp[0].a_constr;
+	;
     break;}
 case 219:
-#line 1781 "asn1p_y.y"
+#line 1784 "asn1p_y.y"
+{
+		yyval.a_constr = yyvsp[0].a_constr;
+	;
+    break;}
+case 220:
+#line 1788 "asn1p_y.y"
+{ asn1p_lexer_hack_push_opaque_state(); ;
+    break;}
+case 221:
+#line 1788 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3083,64 +3089,64 @@
 		yyval.a_constr->value->type = ATV_UNPARSED;
 	;
     break;}
-case 220:
-#line 1792 "asn1p_y.y"
+case 222:
+#line 1799 "asn1p_y.y"
 { yyval.a_ctype = ACT_EL_RANGE; ;
     break;}
-case 221:
-#line 1793 "asn1p_y.y"
+case 223:
+#line 1800 "asn1p_y.y"
 { yyval.a_ctype = ACT_EL_RLRANGE; ;
     break;}
-case 222:
-#line 1794 "asn1p_y.y"
+case 224:
+#line 1801 "asn1p_y.y"
 { yyval.a_ctype = ACT_EL_LLRANGE; ;
     break;}
-case 223:
-#line 1795 "asn1p_y.y"
+case 225:
+#line 1802 "asn1p_y.y"
 { yyval.a_ctype = ACT_EL_ULRANGE; ;
     break;}
-case 224:
-#line 1799 "asn1p_y.y"
+case 226:
+#line 1806 "asn1p_y.y"
 {
 		yyval.a_ctype = ACT_CT_SIZE;
 	;
     break;}
-case 225:
-#line 1802 "asn1p_y.y"
+case 227:
+#line 1809 "asn1p_y.y"
 {
 		yyval.a_ctype = ACT_CT_FROM;
 	;
     break;}
-case 226:
-#line 1808 "asn1p_y.y"
+case 228:
+#line 1815 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_FALSE;
 	;
     break;}
-case 227:
-#line 1813 "asn1p_y.y"
+case 229:
+#line 1820 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(1);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_TRUE;
 	;
     break;}
-case 228:
-#line 1818 "asn1p_y.y"
-{
-		yyval.a_value = yyvsp[0].a_value;
-	;
-    break;}
-case 229:
-#line 1821 "asn1p_y.y"
-{
-		yyval.a_value = yyvsp[0].a_value;
-	;
-    break;}
 case 230:
-#line 1824 "asn1p_y.y"
+#line 1825 "asn1p_y.y"
+{
+		yyval.a_value = yyvsp[0].a_value;
+	;
+    break;}
+case 231:
+#line 1828 "asn1p_y.y"
+{
+		yyval.a_value = yyvsp[0].a_value;
+	;
+    break;}
+case 232:
+#line 1831 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -3153,8 +3159,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 231:
-#line 1838 "asn1p_y.y"
+case 233:
+#line 1845 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -3167,32 +3173,32 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 232:
-#line 1852 "asn1p_y.y"
+case 234:
+#line 1859 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
 	;
     break;}
-case 233:
-#line 1855 "asn1p_y.y"
+case 235:
+#line 1862 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
 	;
     break;}
-case 234:
-#line 1861 "asn1p_y.y"
+case 236:
+#line 1868 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
-case 235:
-#line 1864 "asn1p_y.y"
+case 237:
+#line 1871 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
-case 236:
-#line 1870 "asn1p_y.y"
+case 238:
+#line 1877 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3200,8 +3206,8 @@
 		yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
 	;
     break;}
-case 237:
-#line 1876 "asn1p_y.y"
+case 239:
+#line 1883 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3211,46 +3217,46 @@
 		if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
 	;
     break;}
-case 238:
-#line 1890 "asn1p_y.y"
+case 240:
+#line 1897 "asn1p_y.y"
 { yyval.a_pres = ACPRES_DEFAULT; ;
     break;}
-case 239:
-#line 1891 "asn1p_y.y"
+case 241:
+#line 1898 "asn1p_y.y"
 { yyval.a_pres = yyvsp[0].a_pres; ;
     break;}
-case 240:
-#line 1895 "asn1p_y.y"
+case 242:
+#line 1902 "asn1p_y.y"
 {
 		yyval.a_pres = ACPRES_PRESENT;
 	;
     break;}
-case 241:
-#line 1898 "asn1p_y.y"
+case 243:
+#line 1905 "asn1p_y.y"
 {
 		yyval.a_pres = ACPRES_ABSENT;
 	;
     break;}
-case 242:
-#line 1901 "asn1p_y.y"
+case 244:
+#line 1908 "asn1p_y.y"
 {
 		yyval.a_pres = ACPRES_OPTIONAL;
 	;
     break;}
-case 243:
-#line 1907 "asn1p_y.y"
-{
-		yyval.a_constr = yyvsp[0].a_constr;
-	;
-    break;}
-case 244:
-#line 1910 "asn1p_y.y"
-{
-		yyval.a_constr = yyvsp[0].a_constr;
-	;
-    break;}
 case 245:
-#line 1919 "asn1p_y.y"
+#line 1914 "asn1p_y.y"
+{
+		yyval.a_constr = yyvsp[0].a_constr;
+	;
+    break;}
+case 246:
+#line 1917 "asn1p_y.y"
+{
+		yyval.a_constr = yyvsp[0].a_constr;
+	;
+    break;}
+case 247:
+#line 1926 "asn1p_y.y"
 {
 		asn1p_ref_t *ref = asn1p_ref_new(yylineno);
 		asn1p_constraint_t *ct;
@@ -3264,14 +3270,14 @@
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
 	;
     break;}
-case 246:
-#line 1934 "asn1p_y.y"
+case 248:
+#line 1941 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
 	;
     break;}
-case 247:
-#line 1940 "asn1p_y.y"
+case 249:
+#line 1947 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3279,8 +3285,8 @@
 		yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
 	;
     break;}
-case 248:
-#line 1946 "asn1p_y.y"
+case 250:
+#line 1953 "asn1p_y.y"
 {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -3290,8 +3296,8 @@
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
 	;
     break;}
-case 249:
-#line 1960 "asn1p_y.y"
+case 251:
+#line 1967 "asn1p_y.y"
 {
 		char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
 		int ret;
@@ -3304,8 +3310,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 250:
-#line 1971 "asn1p_y.y"
+case 252:
+#line 1978 "asn1p_y.y"
 {
 		char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
 		int ret;
@@ -3319,14 +3325,14 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 251:
-#line 1987 "asn1p_y.y"
+case 253:
+#line 1994 "asn1p_y.y"
 {
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
-case 252:
-#line 1990 "asn1p_y.y"
+case 254:
+#line 1997 "asn1p_y.y"
 {
 		int l1 = strlen(yyvsp[-2].tv_str);
 		int l3 = strlen(yyvsp[0].tv_str);
@@ -3337,61 +3343,61 @@
 		yyval.tv_str[l1 + 1 + l3] = '\0';
 	;
     break;}
-case 253:
-#line 2008 "asn1p_y.y"
+case 255:
+#line 2015 "asn1p_y.y"
 {
 		yyval.a_marker.flags = EM_NOMARK;
 		yyval.a_marker.default_value = 0;
 	;
     break;}
-case 254:
-#line 2012 "asn1p_y.y"
+case 256:
+#line 2019 "asn1p_y.y"
 { yyval.a_marker = yyvsp[0].a_marker; ;
     break;}
-case 255:
-#line 2016 "asn1p_y.y"
+case 257:
+#line 2023 "asn1p_y.y"
 {
 		yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
 		yyval.a_marker.default_value = 0;
 	;
     break;}
-case 256:
-#line 2020 "asn1p_y.y"
+case 258:
+#line 2027 "asn1p_y.y"
 {
 		yyval.a_marker.flags = EM_DEFAULT;
 		yyval.a_marker.default_value = yyvsp[0].a_value;
 	;
     break;}
-case 257:
-#line 2043 "asn1p_y.y"
+case 259:
+#line 2050 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
 	;
     break;}
-case 258:
-#line 2047 "asn1p_y.y"
+case 260:
+#line 2054 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 	;
     break;}
-case 259:
-#line 2053 "asn1p_y.y"
+case 261:
+#line 2060 "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 260:
-#line 2058 "asn1p_y.y"
+case 262:
+#line 2065 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
 	;
     break;}
-case 261:
-#line 2065 "asn1p_y.y"
+case 263:
+#line 2072 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -3400,30 +3406,30 @@
 		yyval.a_expr->Identifier = yyvsp[0].tv_str;
 	;
     break;}
-case 262:
-#line 2072 "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 263:
-#line 2080 "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 264:
-#line 2088 "asn1p_y.y"
+#line 2079 "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 265:
+#line 2087 "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 266:
+#line 2095 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -3432,8 +3438,8 @@
 		yyval.a_expr->value = yyvsp[0].a_value;
 	;
     break;}
-case 265:
-#line 2095 "asn1p_y.y"
+case 267:
+#line 2102 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -3443,103 +3449,103 @@
 		yyval.a_expr->meta_type = AMT_VALUE;
 	;
     break;}
-case 266:
-#line 2106 "asn1p_y.y"
-{
-		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
-		checkmem(yyval.a_value);
-	;
-    break;}
-case 267:
-#line 2110 "asn1p_y.y"
-{
-		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
-		checkmem(yyval.a_value);
-	;
-    break;}
 case 268:
-#line 2141 "asn1p_y.y"
-{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
+#line 2113 "asn1p_y.y"
+{
+		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
+		checkmem(yyval.a_value);
+	;
     break;}
 case 269:
-#line 2142 "asn1p_y.y"
-{ yyval.a_tag = yyvsp[0].a_tag; ;
+#line 2117 "asn1p_y.y"
+{
+		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
+		checkmem(yyval.a_value);
+	;
     break;}
 case 270:
-#line 2146 "asn1p_y.y"
+#line 2148 "asn1p_y.y"
+{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
+    break;}
+case 271:
+#line 2149 "asn1p_y.y"
+{ yyval.a_tag = yyvsp[0].a_tag; ;
+    break;}
+case 272:
+#line 2153 "asn1p_y.y"
 {
 		yyval.a_tag = yyvsp[-1].a_tag;
 		yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
 	;
     break;}
-case 271:
-#line 2153 "asn1p_y.y"
+case 273:
+#line 2160 "asn1p_y.y"
 {
 		yyval.a_tag = yyvsp[-2].a_tag;
 		yyval.a_tag.tag_value = yyvsp[-1].a_int;
 	;
     break;}
-case 272:
-#line 2159 "asn1p_y.y"
+case 274:
+#line 2166 "asn1p_y.y"
 { yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
     break;}
-case 273:
-#line 2160 "asn1p_y.y"
+case 275:
+#line 2167 "asn1p_y.y"
 { yyval.a_tag.tag_class = TC_UNIVERSAL; ;
     break;}
-case 274:
-#line 2161 "asn1p_y.y"
+case 276:
+#line 2168 "asn1p_y.y"
 { yyval.a_tag.tag_class = TC_APPLICATION; ;
     break;}
-case 275:
-#line 2162 "asn1p_y.y"
+case 277:
+#line 2169 "asn1p_y.y"
 { yyval.a_tag.tag_class = TC_PRIVATE; ;
     break;}
-case 276:
-#line 2166 "asn1p_y.y"
+case 278:
+#line 2173 "asn1p_y.y"
 { yyval.a_tag.tag_mode = TM_DEFAULT; ;
     break;}
-case 277:
-#line 2167 "asn1p_y.y"
+case 279:
+#line 2174 "asn1p_y.y"
 { yyval.a_tag.tag_mode = TM_IMPLICIT; ;
     break;}
-case 278:
-#line 2168 "asn1p_y.y"
+case 280:
+#line 2175 "asn1p_y.y"
 { yyval.a_tag.tag_mode = TM_EXPLICIT; ;
     break;}
-case 279:
-#line 2172 "asn1p_y.y"
-{
-		checkmem(yyvsp[0].tv_str);
-		yyval.tv_str = yyvsp[0].tv_str;
-	;
-    break;}
-case 280:
-#line 2176 "asn1p_y.y"
-{
-		checkmem(yyvsp[0].tv_str);
-		yyval.tv_str = yyvsp[0].tv_str;
-	;
-    break;}
 case 281:
-#line 2184 "asn1p_y.y"
+#line 2179 "asn1p_y.y"
 {
 		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
 case 282:
-#line 2191 "asn1p_y.y"
-{ yyval.tv_str = 0; ;
+#line 2183 "asn1p_y.y"
+{
+		checkmem(yyvsp[0].tv_str);
+		yyval.tv_str = yyvsp[0].tv_str;
+	;
     break;}
 case 283:
-#line 2192 "asn1p_y.y"
+#line 2191 "asn1p_y.y"
 {
+		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
 case 284:
 #line 2198 "asn1p_y.y"
+{ yyval.tv_str = 0; ;
+    break;}
+case 285:
+#line 2199 "asn1p_y.y"
+{
+		yyval.tv_str = yyvsp[0].tv_str;
+	;
+    break;}
+case 286:
+#line 2205 "asn1p_y.y"
 {
 		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
@@ -3767,7 +3773,7 @@
     }
   return 1;
 }
-#line 2204 "asn1p_y.y"
+#line 2211 "asn1p_y.y"
 
 
 
@@ -3907,10 +3913,9 @@
 		expr->Identifier);
 }
 
-extern char *asn1p_text;
-
 int
 yyerror(const char *msg) {
+	extern char *asn1p_text;
 	fprintf(stderr,
 		"ASN.1 grammar parse error "
 		"near line %d (token \"%s\"): %s\n",
@@ -3918,4 +3923,3 @@
 	return -1;
 }
 
-
diff --git a/libasn1parser/asn1p_y.h b/libasn1parser/asn1p_y.h
index 2862195..a391f74 100644
--- a/libasn1parser/asn1p_y.h
+++ b/libasn1parser/asn1p_y.h
@@ -45,92 +45,93 @@
 #define	TOK_capitalreference	268
 #define	TOK_typefieldreference	269
 #define	TOK_valuefieldreference	270
-#define	TOK_ABSENT	271
-#define	TOK_ABSTRACT_SYNTAX	272
-#define	TOK_ALL	273
-#define	TOK_ANY	274
-#define	TOK_APPLICATION	275
-#define	TOK_AUTOMATIC	276
-#define	TOK_BEGIN	277
-#define	TOK_BIT	278
-#define	TOK_BMPString	279
-#define	TOK_BOOLEAN	280
-#define	TOK_BY	281
-#define	TOK_CHARACTER	282
-#define	TOK_CHOICE	283
-#define	TOK_CLASS	284
-#define	TOK_COMPONENT	285
-#define	TOK_COMPONENTS	286
-#define	TOK_CONSTRAINED	287
-#define	TOK_CONTAINING	288
-#define	TOK_DEFAULT	289
-#define	TOK_DEFINITIONS	290
-#define	TOK_DEFINED	291
-#define	TOK_EMBEDDED	292
-#define	TOK_ENCODED	293
-#define	TOK_ENCODING_CONTROL	294
-#define	TOK_END	295
-#define	TOK_ENUMERATED	296
-#define	TOK_EXPLICIT	297
-#define	TOK_EXPORTS	298
-#define	TOK_EXTENSIBILITY	299
-#define	TOK_EXTERNAL	300
-#define	TOK_FALSE	301
-#define	TOK_FROM	302
-#define	TOK_GeneralizedTime	303
-#define	TOK_GeneralString	304
-#define	TOK_GraphicString	305
-#define	TOK_IA5String	306
-#define	TOK_IDENTIFIER	307
-#define	TOK_IMPLICIT	308
-#define	TOK_IMPLIED	309
-#define	TOK_IMPORTS	310
-#define	TOK_INCLUDES	311
-#define	TOK_INSTANCE	312
-#define	TOK_INSTRUCTIONS	313
-#define	TOK_INTEGER	314
-#define	TOK_ISO646String	315
-#define	TOK_MAX	316
-#define	TOK_MIN	317
-#define	TOK_MINUS_INFINITY	318
-#define	TOK_NULL	319
-#define	TOK_NumericString	320
-#define	TOK_OBJECT	321
-#define	TOK_ObjectDescriptor	322
-#define	TOK_OCTET	323
-#define	TOK_OF	324
-#define	TOK_OPTIONAL	325
-#define	TOK_PATTERN	326
-#define	TOK_PDV	327
-#define	TOK_PLUS_INFINITY	328
-#define	TOK_PRESENT	329
-#define	TOK_PrintableString	330
-#define	TOK_PRIVATE	331
-#define	TOK_REAL	332
-#define	TOK_RELATIVE_OID	333
-#define	TOK_SEQUENCE	334
-#define	TOK_SET	335
-#define	TOK_SIZE	336
-#define	TOK_STRING	337
-#define	TOK_SYNTAX	338
-#define	TOK_T61String	339
-#define	TOK_TAGS	340
-#define	TOK_TeletexString	341
-#define	TOK_TRUE	342
-#define	TOK_TYPE_IDENTIFIER	343
-#define	TOK_UNIQUE	344
-#define	TOK_UNIVERSAL	345
-#define	TOK_UniversalString	346
-#define	TOK_UTCTime	347
-#define	TOK_UTF8String	348
-#define	TOK_VideotexString	349
-#define	TOK_VisibleString	350
-#define	TOK_WITH	351
-#define	TOK_EXCEPT	352
-#define	TOK_INTERSECTION	353
-#define	TOK_UNION	354
-#define	TOK_TwoDots	355
-#define	TOK_ThreeDots	356
+#define	TOK_Literal	271
+#define	TOK_ABSENT	272
+#define	TOK_ABSTRACT_SYNTAX	273
+#define	TOK_ALL	274
+#define	TOK_ANY	275
+#define	TOK_APPLICATION	276
+#define	TOK_AUTOMATIC	277
+#define	TOK_BEGIN	278
+#define	TOK_BIT	279
+#define	TOK_BMPString	280
+#define	TOK_BOOLEAN	281
+#define	TOK_BY	282
+#define	TOK_CHARACTER	283
+#define	TOK_CHOICE	284
+#define	TOK_CLASS	285
+#define	TOK_COMPONENT	286
+#define	TOK_COMPONENTS	287
+#define	TOK_CONSTRAINED	288
+#define	TOK_CONTAINING	289
+#define	TOK_DEFAULT	290
+#define	TOK_DEFINITIONS	291
+#define	TOK_DEFINED	292
+#define	TOK_EMBEDDED	293
+#define	TOK_ENCODED	294
+#define	TOK_ENCODING_CONTROL	295
+#define	TOK_END	296
+#define	TOK_ENUMERATED	297
+#define	TOK_EXPLICIT	298
+#define	TOK_EXPORTS	299
+#define	TOK_EXTENSIBILITY	300
+#define	TOK_EXTERNAL	301
+#define	TOK_FALSE	302
+#define	TOK_FROM	303
+#define	TOK_GeneralizedTime	304
+#define	TOK_GeneralString	305
+#define	TOK_GraphicString	306
+#define	TOK_IA5String	307
+#define	TOK_IDENTIFIER	308
+#define	TOK_IMPLICIT	309
+#define	TOK_IMPLIED	310
+#define	TOK_IMPORTS	311
+#define	TOK_INCLUDES	312
+#define	TOK_INSTANCE	313
+#define	TOK_INSTRUCTIONS	314
+#define	TOK_INTEGER	315
+#define	TOK_ISO646String	316
+#define	TOK_MAX	317
+#define	TOK_MIN	318
+#define	TOK_MINUS_INFINITY	319
+#define	TOK_NULL	320
+#define	TOK_NumericString	321
+#define	TOK_OBJECT	322
+#define	TOK_ObjectDescriptor	323
+#define	TOK_OCTET	324
+#define	TOK_OF	325
+#define	TOK_OPTIONAL	326
+#define	TOK_PATTERN	327
+#define	TOK_PDV	328
+#define	TOK_PLUS_INFINITY	329
+#define	TOK_PRESENT	330
+#define	TOK_PrintableString	331
+#define	TOK_PRIVATE	332
+#define	TOK_REAL	333
+#define	TOK_RELATIVE_OID	334
+#define	TOK_SEQUENCE	335
+#define	TOK_SET	336
+#define	TOK_SIZE	337
+#define	TOK_STRING	338
+#define	TOK_SYNTAX	339
+#define	TOK_T61String	340
+#define	TOK_TAGS	341
+#define	TOK_TeletexString	342
+#define	TOK_TRUE	343
+#define	TOK_TYPE_IDENTIFIER	344
+#define	TOK_UNIQUE	345
+#define	TOK_UNIVERSAL	346
+#define	TOK_UniversalString	347
+#define	TOK_UTCTime	348
+#define	TOK_UTF8String	349
+#define	TOK_VideotexString	350
+#define	TOK_VisibleString	351
+#define	TOK_WITH	352
+#define	TOK_EXCEPT	353
+#define	TOK_INTERSECTION	354
+#define	TOK_UNION	355
+#define	TOK_TwoDots	356
+#define	TOK_ThreeDots	357
 
 
 extern YYSTYPE asn1p_lval;
diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y
index 36d9baf..f39bd12 100644
--- a/libasn1parser/asn1p_y.y
+++ b/libasn1parser/asn1p_y.y
@@ -120,6 +120,7 @@
 %token	<tv_str>	TOK_capitalreference		/* "CLASS1" */
 %token	<tv_str>	TOK_typefieldreference		/* "&Pork" */
 %token	<tv_str>	TOK_valuefieldreference		/* "&id" */
+%token	<tv_str>	TOK_Literal			/* "BY" */
 
 /*
  * Token types representing ASN.1 standard keywords.
@@ -307,8 +308,8 @@
 %type	<a_value>		RestrictedCharacterStringValue
 %type	<a_wsynt>		optWithSyntax
 %type	<a_wsynt>		WithSyntax
-%type	<a_wsynt>		WithSyntaxFormat
-%type	<a_wchunk>		WithSyntaxFormatToken
+%type	<a_wsynt>		WithSyntaxList
+%type	<a_wchunk>		WithSyntaxToken
 %type	<a_marker>		optMarker Marker
 %type	<a_int>			optUnique
 %type	<a_pres>		optPresenceConstraint PresenceConstraint
@@ -1054,27 +1055,30 @@
 WithSyntax:
 	TOK_WITH TOK_SYNTAX '{'
 		{ asn1p_lexer_hack_enable_with_syntax(); }
-		WithSyntaxFormat
+		WithSyntaxList
 		'}' {
 		$$ = $5;
 	}
 	;
 
-WithSyntaxFormat:
-	WithSyntaxFormatToken {
+WithSyntaxList:
+	WithSyntaxToken {
 		$$ = asn1p_wsyntx_new();
 		TQ_ADD(&($$->chunks), $1, next);
 	}
-	| WithSyntaxFormat WithSyntaxFormatToken {
+	| WithSyntaxList WithSyntaxToken {
 		$$ = $1;
 		TQ_ADD(&($$->chunks), $2, next);
 	}
 	;
 
-WithSyntaxFormatToken:
+WithSyntaxToken:
 	TOK_opaque {
 		$$ = asn1p_wsyntx_chunk_frombuf($1.buf, $1.len, 0);
 	}
+	| TOK_Literal {
+		$$ = asn1p_wsyntx_chunk_frombuf($1, strlen($1), 0);
+	}
 	| ClassFieldIdentifier {
 		asn1p_ref_t *ref;
 		int ret;
@@ -1084,6 +1088,9 @@
 		checkmem(ret == 0);
 		$$ = asn1p_wsyntx_chunk_fromref(ref, 0);
 	}
+	| '[' WithSyntaxList ']' {
+		$$ = asn1p_wsyntx_chunk_fromsyntax($2);
+	}
 	;
 
 ExtensionAndException:
@@ -2340,10 +2347,9 @@
 		expr->Identifier);
 }
 
-extern char *asn1p_text;
-
 int
 yyerror(const char *msg) {
+	extern char *asn1p_text;
 	fprintf(stderr,
 		"ASN.1 grammar parse error "
 		"near line %d (token \"%s\"): %s\n",
@@ -2351,4 +2357,3 @@
 	return -1;
 }
 
-
diff --git a/libasn1print/asn1print.c b/libasn1print/asn1print.c
index 992a344..423a5fa 100644
--- a/libasn1print/asn1print.c
+++ b/libasn1print/asn1print.c
@@ -412,15 +412,21 @@
 asn1print_with_syntax(asn1p_wsyntx_t *wx, enum asn1print_flags flags) {
 	if(wx) {
 		asn1p_wsyntx_chunk_t *wc;
-		printf(" WITH SYNTAX {");
 		TQ_FOR(wc, &(wx->chunks), next) {
-			if(wc->ref) {
-				asn1print_ref(wc->ref, flags);
-			} else {
-				fwrite(wc->buf, 1, wc->len, stdout);
-			}
+		  switch(wc->type) {
+		  case WC_LITERAL:
+			printf("%s", wc->content.token);
+			break;
+		  case WC_REFERENCE:
+			asn1print_ref(wc->content.ref, flags);
+			break;
+		  case WC_OPTIONALGROUP:
+			printf("[");
+			asn1print_with_syntax(wc->content.syntax,flags);
+			printf("]");
+			break;
+		  }
 		}
-		printf("}\n");
 	}
 
 	return 0;
@@ -651,8 +657,11 @@
 		}
 	}
 
-	if(tc->with_syntax)
+	if(tc->with_syntax) {
+		printf(" WITH SYNTAX {");
 		asn1print_with_syntax(tc->with_syntax, flags);
+		printf("}\n");
+	}
 
 	if(!SEQ_OF && tc->constraints) {
 		printf(" ");