Commit 528b30fc authored by gates's avatar gates
Browse files

Augment the config file again, add ability to insert host certificates inside keydb config files.

parent 40de3398
......@@ -16,7 +16,6 @@
; If a line contains a ; after the title the remainings of that line are
; treated as comment.
;
;
; Processing Key entry block format
; ---------------------------------
; BEGIN PK_LIST
......@@ -30,6 +29,30 @@
; processing key line must end with at least one newline. A processing key
; block must contain at least one processing key.
;
; Host Certificate list block format
; ----------------------------------
; BEGIN HOST_CERT_LIST
; BEGIN HOST_CERT_ENTRY
; <HOST_PRIVATE_KEY>
; <HOST_CERTIFICATE>
; <HOST_NOONCE>
; <HOST_KEY_POINT>
; END HOST_CERT_ENTRY
; ...
; END HOST_CERT_LIST
;
; A Host Certificate list block starts with a single line that contains
; "BEGIN HOST_CERT_LIST" at the beginning and a single line that contains
; "END HOST_CERT_LIST" at the end. In between these two lines are blocks
; representing host certificate entries. Each host certificate entry has a
; single line that contains "BEGIN HOST_CERT_ENTRY" at the beginning and
; a single line that contains "END HOST_CERT_ENTRY" at the end. Each host
; certificate entry block must contain 4 hexadecimal strings. Each hexadecimal
; string must appear in one line at a time. The first hexadecimal string
; is the host private key, the second is the host certificate, the third is the
; host noonce, and the fourth string is the host key point. A host certificate
; list block must contain at least one host certificate entry.
;
; Key entry format
; ----------------
;
......@@ -113,6 +136,24 @@ BEGIN PK_LIST
00000000000000000000000000000000
END PK_LIST
BEGIN HOST_CERT_LIST
; foo's certificate
BEGIN HOST_CERT_ENTRY
0000000000000000000000000000000000000000 ; host private key
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ; host certificate
0000000000000000000000000000000000000000 ; host nonce
0000000000000000000000000000000000000000 ; host key point
END HOST_CERT_ENTRY
; bar's certificate
BEGIN HOST_CERT_ENTRY
0000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000
0000000000000000000000000000000000000000
END HOST_CERT_ENTRY
END HOST_CERT_LIST
0000000000000000000000000000000000000000 = Movie Title | D | 0000-00-00 | V | 00000000000000000000000000000000 ; I am a comment
0000000000000000000000000000000000000000 = Movie Title ; I am NOT a comment | D | 1337-08-15 | T | 1-00000000000000000000000000000000 | 2-00000000000000000000000000000000 | 3-00000000000000000000000000000000
0000000000000000000000000000000000000000 = Movie Title | D | 2007-04-01 | V | 00000000000000000000000000000000 | T | 1-00000000000000000000000000000000
......
......@@ -109,6 +109,36 @@ static int print_config_entries(config_entry_list *list)
return 1;
}
/* Function to print certificate list from config file */
static int print_cert_list(cert_list *list)
{
if (!list)
{
printf("Error: no certificate list object passed in as parameter\n");
return 0;
}
printf("Available certificates:\n");
cert_list *cursor = list;
while (cursor)
{
if (!cursor->host_priv_key)
break;
printf(" Host private key: %s\n", cursor->host_priv_key);
printf(" Host certificate: %s\n", cursor->host_cert);
printf(" Host nonce: %s\n", cursor->host_nonce);
printf(" Host key point: %s\n", cursor->host_key_point);
printf("\n");
cursor = cursor->next;
}
printf("\n");
return 1;
}
/* Function to print config file */
static int print_config_file(config_file *cfgfile)
{
......@@ -127,7 +157,10 @@ static int print_config_file(config_file *cfgfile)
printf("\n");
return print_config_entries(cfgfile->list);
int status1 = print_cert_list(cfgfile->host_cert_list);
int status2 = print_config_entries(cfgfile->list);
return status1 & status2;
}
/* main */
......
......@@ -59,6 +59,8 @@ DIGIT ([0-9]+)
KEYWORD_BEGIN (BEGIN)
KEYWORD_END (END)
KEYWORD_PK_LIST (PK_LIST)
KEYWORD_HOST_CERT_LIST (HOST_CERT_LIST)
KEYWORD_HOST_CERT_ENTRY (HOST_CERT_ENTRY)
ENTRY_ID_DATE (\|[\t ]*[Dd][\t ]*\|)
ENTRY_ID_MEK (\|[\t ]*[Mm][\t ]*\|)
......@@ -103,6 +105,8 @@ BAD_ENTRY ([^\n])
{KEYWORD_BEGIN} { return KEYWORD_BEGIN; }
{KEYWORD_END} { return KEYWORD_END; }
{KEYWORD_PK_LIST} { return KEYWORD_PK_LIST; }
{KEYWORD_HOST_CERT_LIST} { return KEYWORD_HOST_CERT_LIST; }
{KEYWORD_HOST_CERT_ENTRY} { return KEYWORD_HOST_CERT_ENTRY; }
{ENTRY_ID_DATE} { return ENTRY_ID_DATE; }
{ENTRY_ID_MEK} { return ENTRY_ID_MEK; }
......
......@@ -59,6 +59,10 @@ enum
static pk_list *new_pk_list();
static int add_pk_list(pk_list *list, const char *key);
static int add_pk_list_entry(config_file *cfgfile, const char *entry);
static cert_list *new_cert_list();
static int add_cert_list(cert_list *list, const char *host_priv_key,
const char *host_cert, const char *host_nonce,
const char *host_key_point);
static config_entry_list *new_config_entry_list();
static int add_entry(config_entry_list *list, int type, const char *entry);
static digit_key_pair_list *new_digit_key_pair_list();
......@@ -99,6 +103,8 @@ extern int yyget_lineno (void *scanner);
%token KEYWORD_BEGIN
%token KEYWORD_END
%token KEYWORD_PK_LIST
%token KEYWORD_HOST_CERT_LIST
%token KEYWORD_HOST_CERT_ENTRY
%token PUNCT_EQUALS_SIGN
%token PUNCT_VERTICAL_BAR
......@@ -117,9 +123,10 @@ extern int yyget_lineno (void *scanner);
%token BAD_ENTRY
%type <string> discid disc_title
%type <string> host_priv_key host_cert host_nonce host_key_point
%%
config_file
: pk_block config_entries
: pk_block host_cert_list_block config_entries
;
pk_block
......@@ -152,6 +159,74 @@ pk_entry
}
;
host_cert_list_block
: host_cert_list_start host_cert_entries host_cert_list_end
;
host_cert_list_start
: newline_list KEYWORD_BEGIN KEYWORD_HOST_CERT_LIST NEWLINE
| KEYWORD_BEGIN KEYWORD_HOST_CERT_LIST NEWLINE
;
host_cert_list_end
: newline_list KEYWORD_END KEYWORD_HOST_CERT_LIST NEWLINE
| KEYWORD_END KEYWORD_HOST_CERT_LIST NEWLINE
;
host_cert_entries
: host_cert_entries host_cert_entry_block
| host_cert_entry_block
;
host_cert_entry_block
: host_cert_entry_start host_cert_entry host_cert_entry_end
;
host_cert_entry_start
: newline_list KEYWORD_BEGIN KEYWORD_HOST_CERT_ENTRY NEWLINE
| KEYWORD_BEGIN KEYWORD_HOST_CERT_ENTRY NEWLINE
;
host_cert_entry_end
: newline_list KEYWORD_END KEYWORD_HOST_CERT_ENTRY NEWLINE
| KEYWORD_END KEYWORD_HOST_CERT_ENTRY NEWLINE
;
host_cert_entry
: host_priv_key host_cert host_nonce host_key_point
{
add_cert_list(cfgfile->host_cert_list, $1, $2, $3, $4);
}
;
host_priv_key
: newline_list HEXSTRING NEWLINE
{ $$ = $2; }
| HEXSTRING NEWLINE
{ $$ = $1; }
;
host_cert
: newline_list HEXSTRING NEWLINE
{ $$ = $2; }
| HEXSTRING NEWLINE
{ $$ = $1; }
;
host_nonce
: newline_list HEXSTRING NEWLINE
{ $$ = $2; }
| HEXSTRING NEWLINE
{ $$ = $1; }
;
host_key_point
: newline_list HEXSTRING NEWLINE
{ $$ = $2; }
| HEXSTRING NEWLINE
{ $$ = $1; }
;
config_entries
: config_entry_list newline_list
| config_entry_list
......@@ -331,6 +406,7 @@ int keydbcfg_parse_config(config_file *cfgfile, const char *path)
return 0;
cfgfile->pkl = new_pk_list();
cfgfile->host_cert_list = new_cert_list();
cfgfile->list = new_config_entry_list();
void *scanner;
......@@ -397,6 +473,54 @@ static int add_pk_list_entry(config_file *cfgfile, const char *entry)
return 1;
}
/* Function to create new certificate list */
static cert_list *new_cert_list()
{
cert_list *list = (cert_list *)malloc(sizeof(*list));
if (!list)
{
printf("Error allocating memory for new certificate list!\n");
return NULL;
}
list->host_priv_key = NULL;
list->host_cert = NULL;
list->host_nonce = NULL;
list->host_key_point = NULL;
list->next = NULL;
return list;
}
/* Function to add certificate list entry into config file object */
static int add_cert_list(cert_list *list, const char *host_priv_key,
const char *host_cert, const char *host_nonce,
const char *host_key_point)
{
if (!list)
{
printf("Error: no certificate list object passed as parameter.\n");
return 0;
}
cert_list *cursor = list;
while (cursor->next)
cursor = cursor->next;
cursor->host_priv_key = (char*)malloc(strlen(host_priv_key) + 1);
strcpy(cursor->host_priv_key, host_priv_key);
cursor->host_cert = (char*)malloc(strlen(host_cert) + 1);
strcpy(cursor->host_cert, host_cert);
cursor->host_nonce = (char*)malloc(strlen(host_nonce) + 1);
strcpy(cursor->host_nonce, host_nonce);
cursor->host_key_point = (char*)malloc(strlen(host_key_point) + 1);
strcpy(cursor->host_key_point, host_key_point);
cursor->next = new_cert_list();
return 1;
}
/* Function that returns pointer to new config entry list */
config_entry_list *new_config_entry_list()
{
......
......@@ -60,6 +60,17 @@ struct pk_entry
pk_list *next;
};
/* certificate entry */
typedef struct cert_entry cert_list;
struct cert_entry
{
char *host_priv_key;
char *host_cert;
char *host_nonce;
char *host_key_point;
cert_list *next;
};
/* main config entry struct */
typedef struct
{
......@@ -88,6 +99,7 @@ typedef struct config_file_t config_file;
struct config_file_t
{
pk_list *pkl;
cert_list *host_cert_list;
config_entry_list *list;
};
......
......@@ -370,8 +370,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
*yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp;
#define YY_NUM_RULES 23
#define YY_END_OF_BUFFER 24
#define YY_NUM_RULES 25
#define YY_END_OF_BUFFER 26
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
......@@ -379,32 +379,36 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
static yyconst flex_int16_t yy_accept[214] =
static yyconst flex_int16_t yy_accept[252] =
{ 0,
0, 0, 2, 2, 24, 22, 1, 20, 20, 19,
5, 21, 17, 22, 22, 22, 22, 18, 2, 1,
3, 2, 2, 2, 2, 2, 2, 2, 2, 2,
20, 5, 0, 21, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 2, 3, 2, 2,
2, 2, 2, 2, 5, 0, 0, 7, 0, 0,
12, 0, 9, 0, 11, 0, 10, 0, 14, 0,
15, 0, 16, 0, 13, 2, 2, 2, 2, 2,
0, 0, 2, 2, 26, 24, 1, 22, 22, 21,
5, 23, 19, 24, 24, 24, 24, 24, 20, 2,
1, 3, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 22, 5, 0, 23, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
3, 2, 2, 2, 2, 2, 2, 2, 5, 0,
0, 7, 0, 0, 0, 14, 0, 11, 0, 13,
0, 12, 0, 16, 0, 17, 0, 18, 0, 15,
2, 2, 2, 2, 2, 2, 5, 0, 0, 0,
0, 2, 2, 2, 2, 2, 5, 0, 6, 0,
0, 2, 2, 2, 2, 2, 5, 0, 0, 0,
2, 2, 2, 2, 5, 0, 0, 8, 2, 2,
2, 2, 5, 0, 0, 2, 2, 2, 5, 0,
0, 2, 2, 2, 5, 0, 0, 2, 2, 2,
5, 0, 0, 0, 2, 2, 2, 2, 5, 0,
6, 0, 2, 2, 2, 2, 5, 0, 0, 2,
2, 2, 5, 0, 8, 2, 2, 2, 5, 0,
2, 2, 5, 0, 2, 2, 5, 0, 2, 2,
5, 0, 2, 2, 5, 0, 2, 2, 5, 0,
0, 0, 2, 2, 2, 2, 5, 0, 0, 0,
2, 2, 2, 2, 5, 0, 0, 9, 2, 2,
2, 2, 5, 0, 10, 2, 2, 2, 5, 0,
2, 2, 5, 0, 2, 2, 5, 0, 2, 2,
5, 0, 2, 2, 5, 0, 2, 2, 5, 0,
2, 2, 5, 0, 2, 2, 5, 0, 2, 2,
5, 0, 2, 2, 5, 0, 2, 2, 5, 0,
2, 2, 5, 0, 2, 2, 5, 0, 2, 2,
5, 0, 2, 2, 5, 0, 2, 2, 5, 0,
2, 2, 5, 0, 2, 2, 5, 0, 2, 2,
5, 0, 2, 2, 4, 4, 2, 2, 4, 4,
2, 2, 0
2, 2, 4, 4, 2, 2, 4, 4, 2, 2,
0
} ;
static yyconst flex_int32_t yy_ec[256] =
......@@ -415,14 +419,14 @@ static yyconst flex_int32_t yy_ec[256] =
1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 5, 1, 1, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 1, 7, 1,
8, 1, 1, 1, 9, 10, 9, 11, 12, 9,
13, 1, 14, 1, 15, 16, 17, 18, 1, 19,
1, 1, 20, 21, 22, 23, 1, 1, 1, 1,
1, 1, 1, 1, 24, 1, 9, 25, 9, 26,
9, 9, 1, 1, 27, 1, 1, 1, 17, 1,
1, 28, 1, 1, 1, 29, 22, 23, 1, 1,
1, 1, 1, 30, 1, 1, 1, 1, 1, 1,
8, 1, 1, 1, 9, 10, 11, 12, 13, 9,
14, 15, 16, 1, 17, 18, 19, 20, 21, 22,
1, 23, 24, 25, 26, 27, 1, 1, 28, 1,
1, 1, 1, 1, 29, 1, 9, 30, 9, 31,
9, 9, 1, 1, 32, 1, 1, 1, 19, 1,
1, 33, 1, 1, 1, 34, 26, 27, 1, 1,
1, 1, 1, 35, 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, 1,
......@@ -439,268 +443,313 @@ static yyconst flex_int32_t yy_ec[256] =
1, 1, 1, 1, 1
} ;
static yyconst flex_int32_t yy_meta[31] =
static yyconst flex_int32_t yy_meta[36] =
{ 0,
1, 1, 2, 1, 1, 3, 1, 1, 3, 3,
3, 3, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 3, 3, 1, 1, 1, 4
3, 3, 3, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
3, 1, 1, 1, 4
} ;
static yyconst flex_int16_t yy_base[249] =
static yyconst flex_int16_t yy_base[287] =
{ 0,
0, 0, 30, 0, 306, 786, 786, 301, 301, 786,
297, 0, 786, 0, 290, 283, 285, 59, 0, 0,
295, 291, 0, 83, 263, 0, 283, 56, 57, 273,
786, 281, 0, 0, 273, 274, 260, 0, 69, 70,
72, 75, 77, 81, 88, 89, 0, 786, 114, 277,
252, 90, 270, 256, 273, 0, 264, 786, 257, 99,
786, 102, 786, 104, 786, 108, 786, 111, 786, 112,
786, 113, 786, 114, 786, 139, 266, 254, 0, 251,
260, 0, 247, 250, 160, 257, 244, 247, 254, 0,
786, 239, 181, 252, 0, 237, 246, 0, 230, 202,
241, 225, 239, 0, 786, 223, 238, 0, 237, 0,
244, 236, 235, 0, 265, 234, 233, 0, 286, 232,
231, 0, 307, 230, 225, 0, 328, 224, 220, 0,
349, 219, 218, 0, 370, 217, 216, 0, 391, 215,
214, 0, 412, 213, 212, 0, 433, 211, 210, 0,
454, 209, 204, 0, 475, 203, 199, 0, 496, 198,
197, 0, 517, 196, 195, 0, 538, 194, 193, 0,
559, 192, 191, 0, 580, 190, 189, 0, 601, 188,
183, 0, 622, 182, 178, 0, 643, 177, 176, 0,
664, 175, 174, 0, 685, 173, 172, 0, 706, 171,
170, 0, 727, 169, 168, 0, 748, 167, 162, 0,
0, 161, 786, 160, 774, 778, 781, 159, 158, 157,
156, 155, 154, 153, 152, 151, 150, 149, 144, 143,
134, 133, 132, 130, 128, 127, 125, 124, 119, 118,
114, 109, 95, 94, 64, 63, 62, 61
0, 0, 35, 0, 362, 949, 949, 357, 357, 949,
353, 0, 949, 0, 345, 337, 335, 338, 69, 0,
0, 350, 350, 0, 98, 317, 0, 345, 67, 66,
329, 332, 949, 342, 0, 0, 328, 329, 313, 307,
0, 80, 81, 82, 85, 87, 88, 90, 91, 0,
949, 124, 329, 299, 91, 321, 308, 302, 324, 0,
313, 949, 303, 309, 96, 949, 104, 949, 110, 949,
111, 949, 112, 949, 116, 949, 117, 949, 122, 949,
152, 320, 309, 0, 299, 305, 316, 0, 296, 286,
295, 178, 304, 289, 279, 291, 300, 0, 949, 294,
280, 204, 297, 0, 291, 277, 294, 0, 286, 273,
230, 291, 283, 265, 283, 0, 262, 949, 256, 278,
260, 0, 276, 0, 256, 282, 274, 254, 272, 0,
248, 308, 270, 246, 268, 0, 114, 334, 267, 125,
266, 0, 251, 254, 360, 258, 243, 243, 252, 0,
232, 232, 386, 249, 229, 229, 246, 0, 228, 225,
412, 243, 225, 222, 240, 0, 217, 949, 438, 238,
210, 0, 231, 0, 949, 464, 227, 0, 226, 0,
490, 225, 224, 0, 516, 223, 222, 0, 542, 221,
220, 0, 568, 219, 218, 0, 594, 217, 216, 0,
620, 215, 214, 0, 646, 213, 212, 0, 672, 206,
205, 0, 698, 201, 200, 0, 724, 199, 198, 0,
750, 197, 196, 0, 776, 195, 194, 0, 802, 193,
192, 0, 828, 191, 190, 0, 854, 189, 188, 0,
880, 187, 186, 0, 906, 180, 179, 0, 0, 175,
949, 177, 937, 941, 944, 176, 175, 174, 173, 172,
171, 170, 169, 168, 167, 166, 165, 164, 163, 157,
156, 153, 150, 147, 146, 145, 141, 139, 138, 137,
118, 75, 74, 73, 72, 71
} ;
static yyconst flex_int16_t yy_def[249] =
static yyconst flex_int16_t yy_def[287] =
{ 0,
213, 1, 213, 3, 213, 213, 213, 213, 213, 213,
214, 215, 213, 214, 214, 214, 213, 213, 216, 216,
213, 216, 216, 216, 217, 216, 24, 24, 24, 216,
213, 218, 218, 215, 218, 213, 213, 18, 213, 213,
213, 213, 213, 213, 213, 213, 216, 213, 216, 49,
217, 49, 216, 216, 219, 219, 213, 213, 213, 213,
213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
213, 213, 213, 213, 213, 216, 76, 216, 216, 216,
220, 220, 213, 213, 216, 85, 216, 216, 221, 221,
213, 213, 216, 93, 216, 216, 222, 222, 213, 216,
100, 216, 223, 223, 213, 216, 106, 216, 224, 224,
216, 111, 225, 225, 111, 115, 226, 226, 115, 119,
227, 227, 119, 123, 228, 228, 123, 127, 229, 229,
127, 131, 230, 230, 131, 135, 231, 231, 135, 139,
232, 232, 139, 143, 233, 233, 143, 147, 234, 234,
147, 151, 235, 235, 151, 155, 236, 236, 155, 159,
237, 237, 159, 163, 238, 238, 163, 167, 239, 239,
167, 171, 240, 240, 171, 175, 241, 241, 175, 179,
242, 242, 179, 183, 243, 243, 183, 187, 244, 244,
187, 191, 245, 245, 191, 195, 246, 246, 195, 199,
247, 247, 199, 203, 248, 248, 203, 207, 248, 248,
207, 207, 0, 213, 213, 213, 213, 213, 213, 213,
213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
213, 213, 213, 213, 213, 213, 213, 213
251, 1, 251, 3, 251, 251, 251, 251, 251, 251,
252, 253, 251, 252, 252, 252, 251, 251, 251, 254,
254, 251, 254, 254, 254, 255, 254, 25, 25, 25,
254, 254, 251, 256, 256, 253, 256, 251, 251, 251,
19, 251, 251, 251, 251, 251, 251, 251, 251, 254,
251, 254, 52, 255, 52, 254, 254, 254, 257, 257,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
254, 81, 254, 254, 254, 254, 258, 258, 251, 251,
251, 254, 92, 254, 254, 254, 259, 259, 251, 251,
251, 254, 102, 254, 254, 254, 260, 260, 251, 251,
254, 111, 254, 254, 261, 261, 251, 251, 254, 119,
254, 254, 262, 262, 251, 254, 126, 254, 263, 263,
251, 254, 132, 254, 264, 264, 251, 254, 138, 254,
265, 265, 251, 251, 254, 145, 254, 254, 266, 266,
251, 251, 254, 153, 254, 254, 267, 267, 251, 251,
254, 161, 254, 254, 268, 268, 251, 251, 254, 169,
254, 254, 269, 269, 251, 254, 176, 254, 270, 270,
254, 181, 271, 271, 181, 185, 272, 272, 185, 189,
273, 273, 189, 193, 274, 274, 193, 197, 275, 275,
197, 201, 276, 276, 201, 205, 277, 277, 205, 209,
278, 278, 209, 213, 279, 279, 213, 217, 280, 280,
217, 221, 281, 281, 221, 225, 282, 282, 225, 229,
283, 283, 229, 233, 284, 284, 233, 237, 285, 285,
237, 241, 286, 286, 241, 245, 286, 286, 245, 245,
0, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251
} ;
static yyconst flex_int16_t yy_nxt[817] =
static yyconst flex_int16_t yy_nxt[985] =
{ 0,
6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
14, 16, 6, 6, 6, 6, 6, 6, 17, 6,
6, 6, 6, 6, 14, 14, 6, 6, 6, 18,
19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
27, 29, 19, 19, 19, 19, 19, 19, 30, 19,
19, 19, 19, 19, 27, 27, 19, 19, 19, 18,
38, 50, 50, 210, 206, 202, 198, 52, 39, 40,
60, 62, 41, 64, 53, 42, 66, 43, 68, 44,
45, 46, 70, 39, 40, 41, 43, 44, 49, 72,
74, 50, 50, 50, 50, 77, 194, 190, 61, 63,
60, 65, 78, 62, 67, 64, 69, 50, 50, 66,
71, 186, 68, 70, 72, 74, 182, 73, 75, 76,
178, 174, 77, 77, 77, 77, 170, 166, 61, 162,
158, 63, 154, 65, 150, 146, 142, 67, 77, 77,
69, 71, 73, 75, 85, 138, 134, 86, 86, 86,
86, 130, 126, 122, 118, 114, 110, 104, 98, 90,
82, 56, 33, 86, 86, 93, 212, 209, 94, 94,
94, 94, 212, 209, 208, 205, 204, 201, 200, 197,