Commit 15000a41 authored by gates's avatar gates
Browse files

Enable parsing of device keys.

parent 1fc09a9c
......@@ -7,10 +7,11 @@
; This file is provided as documentation and as an example of the key database
; file used by libaacs, it contains no valid keys or entries.
;
; A config file has three main sections. The first section is the processing key
; entry block. The second section is the host certificate list block. The third
; and final section contains the list of keys for a blu-ray/hd-dvd disc. Each
; section is explained in more detail later in this file.
; A config file has four main sections. The first section is the device key list
; block, the second is the processing key entry block. The third section is the
; host certificate list block. The fourth and final section contains the list of
; keys for a blu-ray/hd-dvd discs. Each section is explained in more detail
; later in this file.
;
; The encoding of this file is UTF-8 without BOM (if the BOM is present the
; first line will not get recognized). A line delimiter may be either LF (\n) or
......@@ -36,6 +37,33 @@
;
; $ sed -i 's/\([[:xdigit:]]\)\{5,\}/0x&/g' KEYDB.cfg
;
; Device Key list block format
; ---------------------------------
; BEGIN DK_LIST
; BEGIN DK_ENTRY
; DEVICE_KEY <HEXSTRING>
; DEVICE_NODE <HEXSTRING>
; END DK_ENTRY
; ...
; END DK_LIST
;
; The device key list block contains a list of device keys to use along with
; their respective device node number.
;
; The device key list block begins with the keywords "BEGIN DK_LIST" and ends
; with the keywords "END DK_LIST". This block contains a list of device key
; entry blocks.
;
; The device key entry block begins with "BEGIN DK_ENTRY" and ends with
; "END DK_ENTRY". Within a device key entry block are two hexadecimal strings.
; The first hexadecimal string is preceded by the keyword "DEVICE_KEY" and is
; the hexadecimal string representing the device key. The second hexadecimal
; string is preceded by the keyword "DEVICE_NODE" and is the hexadecimal string
; representing the device node number.
;
; Note that each of these entries must end with at least one new line, as
; shown in the example above.
;
; Processing Key entry block format
; ---------------------------------
; BEGIN PK_LIST
......@@ -158,6 +186,17 @@
; Examples
; --------
;
BEGIN DK_LIST
BEGIN DK_ENTRY
DEVICE_KEY 0x00000000000000000000000000000000 ; I am a comment
DEVICE_NODE 0x0
END DK_ENTRY
BEGIN DK_ENTRY
DEVICE_KEY 0x00000000000000000000000000000000
DEVICE_NODE 0x0
END DK_ENTRY
END DK_LIST
BEGIN PK_LIST
0x00000000000000000000000000000000 ; I am a comment
0x00000000000000000000000000000000
......
......@@ -133,6 +133,21 @@ static int print_cert_list(cert_list *list)
/* Function to print config file */
static int print_config_file(config_file *cfgfile)
{
printf("Available device keys:\n");
dk_list *dkcursor = cfgfile->dkl;
while (dkcursor)
{
if (!dkcursor->key)
break;
printf(" Device key: %s\n", dkcursor->key);
printf(" Device node: %lu\n", dkcursor->node);
dkcursor = dkcursor->next;
}
printf("\n");
printf("Available processing keys:\n");
pk_list *cursor = cfgfile->pkl;
......@@ -145,7 +160,6 @@ static int print_config_file(config_file *cfgfile)
cursor = cursor->next;
}
printf("\n");
int status1 = print_cert_list(cfgfile->host_cert_list);
......
......@@ -49,6 +49,10 @@ DIGIT ([0-9]+)
KEYWORD_BEGIN ([Bb][Ee][Gg][Ii][Nn][ \t]+)
KEYWORD_END ([Ee][Nn][Dd][ \t]+)
KEYWORD_DK_LIST ([Dd][Kk]_[Ll][Ii][Ss][Tt])
KEYWORD_DK_ENTRY ([Dd][Kk]_[Ee][Nn][Tt][Rr][Yy])
KEYWORD_DEVICE_KEY ([Dd][Ee][Vv][Ii][Cc][Ee]_[Kk][Ee][Yy])
KEYWORD_DEVICE_NODE ([Dd][Ee][Vv][Ii][Cc][Ee]_[Nn][Oo][Dd][Ee])
KEYWORD_PK_LIST ([Pp][Kk]_[Ll][Ii][Ss][Tt])
KEYWORD_HOST_CERT_LIST ([Hh][Oo][Ss][Tt]_[Cc][Ee][Rr][Tt]_[Ll][Ii][Ss][Tt])
KEYWORD_HOST_CERT_ENTRY ([Hh][Oo][Ss][Tt]_[Cc][Ee][Rr][Tt]_[Ee][Nn][Tt][Rr][Yy])
......@@ -101,6 +105,10 @@ BAD_ENTRY ([^\n])
{KEYWORD_BEGIN} { return KEYWORD_BEGIN; }
{KEYWORD_END} { return KEYWORD_END; }
{KEYWORD_DK_LIST} { return KEYWORD_DK_LIST; }
{KEYWORD_DK_ENTRY} { return KEYWORD_DK_ENTRY; }
{KEYWORD_DEVICE_KEY} { return KEYWORD_DEVICE_KEY; }
{KEYWORD_DEVICE_NODE} { return KEYWORD_DEVICE_NODE; }
{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; }
......
......@@ -62,6 +62,9 @@ enum
ENTRY_TYPE_UK
};
static dk_list *new_dk_list();
static dk_list *add_dk_list_entry(dk_list *list, const char *key,
const char *node);
static pk_list *new_pk_list();
static pk_list *add_pk_list_entry(pk_list *list, const char *key);
static cert_list *new_cert_list();
......@@ -75,7 +78,7 @@ static digit_key_pair_list *add_digit_key_pair_entry(digit_key_pair_list *list,
int type, unsigned int digit, const char *key);
static int add_date_entry(config_entry_list *list, unsigned int year,
unsigned int month, unsigned int day);
void yyerror (void *scanner, pk_list *pklist, cert_list *clist,
void yyerror (void *scanner, dk_list *dklist, pk_list *pklist, cert_list *clist,
config_entry_list *celist, digit_key_pair_list *dkplist,
const char *msg);
extern int yyget_lineno (void *scanner);
......@@ -93,6 +96,7 @@ extern int yyget_lineno (void *scanner);
%yacc
%lex-param{void *scanner}
%parse-param{void *scanner}
%parse-param{dk_list *dklist}
%parse-param{pk_list *pklist}
%parse-param{cert_list *clist}
%parse-param{config_entry_list *celist}
......@@ -110,6 +114,10 @@ extern int yyget_lineno (void *scanner);
%token KEYWORD_BEGIN
%token KEYWORD_END
%token KEYWORD_DK_LIST
%token KEYWORD_DK_ENTRY
%token KEYWORD_DEVICE_KEY
%token KEYWORD_DEVICE_NODE
%token KEYWORD_PK_LIST
%token KEYWORD_HOST_CERT_LIST
%token KEYWORD_HOST_CERT_ENTRY
......@@ -136,9 +144,64 @@ extern int yyget_lineno (void *scanner);
%type <string> discid disc_title
%type <string> host_priv_key host_cert host_nonce host_key_point hexstring_list
%type <string> device_key device_node
%%
config_file
: pk_block host_cert_list_block config_entries
: dk_list_block pk_block host_cert_list_block config_entries
;
dk_list_block
: dk_list_start dk_entries dk_list_end
;
dk_list_start
: newline_list KEYWORD_BEGIN KEYWORD_DK_LIST NEWLINE
| KEYWORD_BEGIN KEYWORD_DK_LIST NEWLINE
;
dk_list_end
: newline_list KEYWORD_END KEYWORD_DK_LIST NEWLINE
| KEYWORD_END KEYWORD_DK_LIST NEWLINE
;
dk_entries
: dk_entries dk_entry_block
| dk_entry_block
;
dk_entry_block
: dk_entry_start dk_entry dk_entry_end
;
dk_entry_start
: newline_list KEYWORD_BEGIN KEYWORD_DK_ENTRY NEWLINE
| KEYWORD_BEGIN KEYWORD_DK_ENTRY NEWLINE
;
dk_entry_end
: newline_list KEYWORD_END KEYWORD_DK_ENTRY NEWLINE
| KEYWORD_END KEYWORD_DK_ENTRY NEWLINE
;
dk_entry
: device_key device_node
{
dklist = add_dk_list_entry(dklist, $1, $2);
}
;
device_key
: newline_list KEYWORD_DEVICE_KEY hexstring_list NEWLINE
{ $$ = $3; }
| KEYWORD_DEVICE_KEY hexstring_list NEWLINE
{ $$ = $2; }
;
device_node
: newline_list KEYWORD_DEVICE_NODE hexstring_list NEWLINE
{ $$ = $3; }
| KEYWORD_DEVICE_NODE hexstring_list NEWLINE
{ $$ = $2; }
;
pk_block
......@@ -462,6 +525,7 @@ int keydbcfg_parse_config(config_file *cfgfile, const char *path)
if (!fp)
return 0;
dk_list *head_dklist = new_dk_list();
pk_list *head_pklist = new_pk_list();
cert_list *head_clist = new_cert_list();
config_entry_list *head_celist = new_config_entry_list();
......@@ -470,9 +534,11 @@ int keydbcfg_parse_config(config_file *cfgfile, const char *path)
void *scanner;
yylex_init(&scanner);
yyset_in(fp, scanner);
int retval = yyparse(scanner, head_pklist, head_clist, head_celist, dkplist);
int retval = yyparse(scanner, head_dklist, head_pklist, head_clist,
head_celist, dkplist);
yylex_destroy(scanner);
cfgfile->dkl = head_dklist;
cfgfile->pkl = head_pklist;
cfgfile->host_cert_list = head_clist;
cfgfile->list = head_celist;
......@@ -539,6 +605,34 @@ int keydbcfg_config_file_close(config_file *cfgfile)
return 1;
}
/* Function to return new dk_list object */
static dk_list *new_dk_list()
{
dk_list *dkl = (dk_list *)malloc(sizeof(*dkl));
dkl->key = NULL;
dkl->next = NULL;
return dkl;
}
/* Function to add dk to config file */
static dk_list *add_dk_list_entry(dk_list *list, const char *key,
const char *node)
{
if (!list)
{
printf("Error: No dk list passed as parameter.\n");
return NULL;
}
list->key = (char*)malloc(strlen(key) + 1);
strcpy(list->key, key);
list->node = strtoul(node, NULL, 16);
list->next = new_dk_list();
return list->next;
}
/* Function to return new pk_list object */
static pk_list *new_pk_list()
{
......@@ -734,7 +828,7 @@ static int add_date_entry(config_entry_list *list, unsigned int year,
}
/* Our definition of yyerror */
void yyerror (void *scanner, pk_list *pklist, cert_list *clist,
void yyerror (void *scanner, dk_list *dklist, pk_list *pklist, cert_list *clist,
config_entry_list *celist, digit_key_pair_list *dkplist,
const char *msg)
{
......
......@@ -47,6 +47,15 @@ struct date_entry_t
unsigned int day;
};
/* dk entry */
typedef struct dk_entry dk_list;
struct dk_entry
{
char *key;
unsigned long node;
dk_list *next;
};
/* pk entry */
typedef struct pk_entry pk_list;
struct pk_entry
......@@ -94,6 +103,7 @@ struct config_entry_list_t
typedef struct config_file_t config_file;
struct config_file_t
{
dk_list *dkl;
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 30
#define YY_END_OF_BUFFER 31
#define YY_NUM_RULES 34
#define YY_END_OF_BUFFER 35
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
......@@ -379,28 +379,34 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
static yyconst flex_int16_t yy_accept[188] =
static yyconst flex_int16_t yy_accept[238] =
{ 0,
0, 0, 2, 2, 31, 29, 1, 27, 27, 25,
5, 5, 28, 23, 29, 29, 29, 29, 29, 24,
2, 1, 3, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 5, 0, 28, 0, 0, 0, 0,
26, 26, 0, 0, 0, 0, 0, 0, 0, 0,
0, 2, 2, 2, 2, 2, 2, 2, 2, 4,
0, 0, 0, 0, 26, 0, 18, 0, 15, 0,
17, 0, 16, 0, 20, 0, 21, 0, 22, 0,
19, 2, 2, 2, 2, 2, 0, 7, 0, 0,
2, 2, 2, 2, 0, 0, 0, 2, 2, 2,
6, 0, 0, 0, 0, 0, 2, 2, 2, 2,
2, 2, 0, 0, 0, 0, 8, 2, 2, 2,
2, 2, 0, 0, 0, 0, 2, 2, 2, 2,
0, 0, 0, 0, 2, 2, 2, 2, 12, 0,
0, 0, 0, 2, 2, 2, 2, 2, 0, 0,
0, 13, 0, 2, 2, 2, 2, 2, 0, 0,
0, 0, 2, 2, 35, 33, 1, 31, 31, 29,
5, 5, 32, 27, 33, 33, 33, 33, 33, 33,
28, 2, 1, 3, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 5, 0, 32, 0, 0,
0, 0, 0, 0, 30, 30, 0, 0, 0, 0,
0, 0, 0, 0, 0, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 4, 0, 0, 0, 0,
0, 0, 30, 0, 22, 0, 19, 0, 21, 0,
20, 0, 24, 0, 25, 0, 26, 0, 23, 2,
2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
7, 0, 0, 2, 2, 2, 2, 2, 2, 2,
0, 0, 0, 0, 0, 0, 2, 2, 2, 2,
2, 2, 6, 0, 0, 0, 0, 0, 0, 0,
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
0, 0, 8, 0, 0, 0, 0, 12, 2, 2,
2, 2, 2, 2, 2, 2, 0, 0, 9, 0,
0, 0, 0, 2, 2, 2, 2, 2, 2, 2,
0, 0, 0, 0, 0, 0, 2, 2, 2, 2,
2, 2, 10, 0, 16, 0, 0, 0, 0, 2,
2, 2, 2, 2, 2, 2, 11, 0, 0, 0,
17, 0, 2, 2, 2, 2, 2, 2, 0, 0,
0, 0, 2, 2, 2, 2, 0, 0, 0, 0,
2, 2, 2, 2, 0, 9, 0, 11, 2, 2,
2, 2, 10, 14, 2, 2, 0
2, 2, 2, 2, 0, 13, 0, 15, 2, 2,
2, 2, 14, 18, 2, 2, 0
} ;
static yyconst flex_int32_t yy_ec[256] =
......@@ -443,97 +449,112 @@ static yyconst flex_int32_t yy_meta[34] =
4, 1, 4
} ;
static yyconst flex_int16_t yy_base[192] =
static yyconst flex_int16_t yy_base[242] =
{ 0,
0, 0, 33, 0, 274, 275, 275, 275, 275, 275,
61, 63, 0, 275, 259, 251, 249, 252, 68, 89,
0, 0, 275, 0, 0, 67, 69, 46, 0, 255,
247, 245, 248, 74, 0, 0, 250, 251, 238, 230,
257, 257, 0, 80, 81, 85, 86, 87, 90, 91,
92, 0, 78, 120, 64, 244, 245, 232, 224, 0,
238, 252, 227, 233, 275, 96, 275, 102, 275, 103,
275, 105, 275, 106, 275, 108, 275, 109, 275, 119,
275, 0, 234, 248, 223, 229, 226, 244, 213, 227,
222, 240, 209, 223, 237, 125, 213, 235, 132, 211,
233, 220, 219, 210, 207, 204, 227, 214, 213, 204,
201, 198, 199, 192, 200, 203, 275, 195, 188, 196,
199, 0, 189, 182, 201, 184, 185, 178, 197, 180,
126, 184, 192, 173, 138, 181, 189, 170, 199, 135,
178, 197, 180, 195, 137, 174, 193, 176, 172, 175,
174, 188, 175, 167, 170, 169, 183, 170, 157, 157,
158, 146, 146, 144, 147, 137, 142, 139, 138, 161,
138, 135, 134, 157, 127, 275, 145, 143, 92, 0,
101, 99, 275, 97, 0, 84, 275, 170, 174, 177,
75
0, 0, 33, 0, 322, 323, 323, 323, 323, 323,
61, 63, 0, 323, 307, 57, 299, 297, 300, 69,
89, 0, 0, 323, 0, 0, 70, 72, 49, 0,
303, 67, 295, 293, 296, 77, 0, 0, 298, 284,
279, 297, 284, 276, 303, 303, 0, 72, 85, 86,
87, 90, 91, 92, 93, 0, 90, 121, 70, 290,
276, 271, 289, 276, 268, 0, 282, 281, 94, 295,
270, 276, 323, 96, 323, 105, 323, 108, 323, 109,
323, 112, 323, 119, 323, 120, 323, 128, 323, 0,
277, 276, 125, 290, 265, 271, 268, 276, 266, 269,
283, 252, 266, 261, 269, 259, 262, 276, 245, 259,
273, 260, 247, 247, 125, 246, 268, 255, 242, 242,
137, 241, 263, 232, 239, 236, 247, 246, 237, 234,
231, 254, 223, 230, 227, 238, 237, 228, 225, 222,
129, 217, 323, 222, 215, 223, 226, 323, 133, 212,
0, 217, 210, 218, 221, 0, 223, 214, 323, 209,
202, 221, 204, 217, 208, 0, 203, 196, 215, 198,
195, 211, 134, 200, 208, 189, 190, 206, 138, 195,
203, 184, 323, 201, 212, 143, 191, 210, 193, 0,
196, 207, 145, 186, 205, 188, 323, 184, 187, 186,
200, 187, 0, 179, 182, 181, 195, 182, 169, 169,
172, 162, 165, 165, 168, 158, 163, 160, 159, 182,
159, 156, 153, 174, 142, 323, 167, 166, 137, 0,
163, 161, 323, 154, 0, 102, 323, 170, 174, 177,
83
} ;
static yyconst flex_int16_t yy_def[192] =
static yyconst flex_int16_t yy_def[242] =
{ 0,
187, 1, 187, 3, 187, 187, 187, 187, 187, 187,
187, 187, 188, 187, 187, 187, 187, 187, 187, 187,
189, 189, 187, 189, 189, 189, 189, 190, 189, 189,
189, 189, 189, 187, 191, 188, 187, 187, 187, 187,
187, 187, 20, 187, 187, 187, 187, 187, 187, 187,
187, 189, 189, 189, 190, 189, 189, 189, 189, 191,
187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
187, 54, 189, 189, 189, 189, 187, 187, 187, 187,
189, 189, 189, 189, 187, 187, 187, 189, 189, 189,
187, 187, 187, 187, 187, 187, 189, 189, 189, 189,
189, 189, 187, 187, 187, 187, 187, 189, 189, 189,
189, 189, 187, 187, 187, 187, 189, 189, 189, 189,
187, 187, 187, 187, 189, 189, 189, 189, 187, 187,
187, 187, 187, 189, 189, 189, 189, 189, 187, 187,
187, 187, 187, 189, 189, 189, 189, 189, 187, 187,
187, 187, 189, 189, 189, 189, 187, 187, 187, 187,
189, 189, 189, 189, 187, 187, 187, 187, 189, 189,
189, 189, 187, 187, 189, 189, 0, 187, 187, 187,
187
237, 1, 237, 3, 237, 237, 237, 237, 237, 237,
237, 237, 238, 237, 237, 237, 237, 237, 237, 237,
237, 239, 239, 237, 239, 239, 239, 239, 240, 239,
239, 239, 239, 239, 239, 237, 241, 238, 237, 237,
237, 237, 237, 237, 237, 237, 21, 237, 237, 237,
237, 237, 237, 237, 237, 239, 239, 239, 240, 239,
239, 239, 239, 239, 239, 241, 237, 237, 237, 237,
237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
237, 237, 237, 237, 237, 237, 237, 237, 237, 58,
239, 239, 239, 239, 239, 239, 237, 237, 237, 237,
237, 237, 237, 239, 239, 239, 239, 239, 239, 239,
237, 237, 237, 237, 237, 237, 239, 239, 239, 239,
239, 239, 237, 237, 237, 237, 237, 237, 237, 237,
237, 239, 239, 239, 239, 239, 239, 239, 239, 239,
237, 237, 237, 237, 237, 237, 237, 237, 239, 239,
239, 239, 239, 239, 239, 239, 237, 237, 237, 237,
237, 237, 237, 239, 239, 239, 239, 239, 239, 239,
237, 237, 237, 237, 237, 237, 239, 239, 239, 239,
239, 239, 237, 237, 237, 237, 237, 237, 237, 239,
239, 239, 239, 239, 239, 239, 237, 237, 237, 237,
237, 237, 239, 239, 239, 239, 239, 239, 237, 237,
237, 237, 239, 239, 239, 239, 237, 237, 237, 237,
239, 239, 239, 239, 237, 237, 237, 237, 239, 239,
239, 239, 237, 237, 239, 239, 0, 237, 237, 237,
237
} ;
static yyconst flex_int16_t yy_nxt[309] =
static yyconst flex_int16_t yy_nxt[357] =
{ 0,
6, 7, 8, 9, 10, 11, 12, 13, 14, 6,
15, 6, 6, 16, 6, 17, 6, 6, 6, 6,
6, 6, 18, 6, 6, 6, 6, 6, 6, 6,
19, 6, 20, 21, 22, 23, 24, 25, 26, 27,
28, 29, 21, 30, 21, 21, 31, 21, 32, 21,
21, 21, 21, 21, 21, 33, 21, 21, 21, 21,
21, 21, 21, 19, 21, 20, 34, 34, 34, 34,
41, 42, 53, 53, 53, 53, 36, 60, 36, 34,
34, 66, 68, 53, 53, 186, 70, 72, 74, 35,
43, 76, 78, 80, 36, 54, 36, 66, 184, 44,
182, 45, 186, 68, 70, 46, 72, 74, 47, 76,
78, 48, 67, 69, 49, 50, 51, 71, 73, 75,
80, 185, 77, 79, 81, 82, 82, 139, 67, 82,
82, 82, 82, 82, 69, 71, 102, 73, 75, 144,
77, 79, 103, 108, 178, 104, 184, 105, 149, 109,
154, 81, 110, 150, 111, 155, 183, 140, 182, 181,
180, 179, 178, 177, 176, 175, 174, 173, 172, 145,
36, 171, 36, 36, 52, 170, 52, 55, 169, 55,
55, 168, 167, 166, 157, 165, 164, 163, 162, 152,
161, 160, 159, 158, 157, 156, 144, 153, 152, 151,
139, 148, 147, 146, 143, 142, 141, 138, 137, 136,
135, 134, 133, 132, 131, 130, 129, 128, 127, 126,
125, 124, 123, 122, 121, 120, 119, 118, 107, 117,
116, 115, 114, 113, 101, 112, 107, 106, 101, 100,
99, 92, 98, 97, 96, 88, 95, 94, 93, 92,
91, 90, 89, 88, 87, 86, 85, 84, 83, 65,
65, 64, 63, 62, 61, 59, 58, 57, 56, 40,
39, 38, 37, 187, 5, 187, 187, 187, 187, 187,
187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
187, 187, 187, 187, 187, 187, 187, 187
15, 6, 16, 17, 6, 18, 6, 6, 6, 6,
6, 6, 19, 6, 6, 6, 6, 6, 6, 6,
20, 6, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 22, 31, 22, 32, 33, 22, 34, 22,
22, 22, 22, 22, 22, 35, 22, 22, 22, 22,
22, 22, 22, 20, 22, 21, 36, 36, 36, 36,
40, 45, 46, 74, 41, 57, 57, 57, 57, 38,
61, 38, 36, 36, 62, 66, 76, 78, 80, 37,
47, 82, 84, 86, 88, 57, 57, 74, 58, 48,
38, 49, 38, 236, 75, 50, 76, 99, 51, 78,
80, 52, 100, 82, 53, 54, 55, 77, 79, 81,
84, 86, 83, 85, 87, 89, 90, 90, 75, 88,
90, 90, 90, 90, 90, 185, 127, 77, 106, 192,
79, 81, 128, 107, 83, 129, 157, 130, 136, 158,
164, 85, 87, 165, 137, 234, 198, 138, 204, 139,
89, 199, 232, 205, 236, 186, 235, 228, 234, 193,
38, 233, 38, 38, 56, 232, 56, 59, 231, 59,
59, 230, 229, 228, 227, 226, 225, 224, 223, 222,
221, 220, 219, 218, 217, 216, 207, 215, 214, 213,
212, 201, 211, 210, 209, 208, 207, 206, 192, 203,
202, 201, 200, 185, 197, 196, 195, 194, 191, 190,
189, 188, 187, 184, 183, 182, 181, 180, 179, 178,
177, 176, 175, 174, 173, 172, 171, 170, 169, 168,
167, 166, 163, 162, 161, 160, 159, 156, 155, 154,
153, 152, 151, 150, 149, 132, 148, 147, 146, 145,
144, 143, 142, 141, 123, 140, 135, 134, 133, 132,
131, 126, 125, 124, 123, 122, 121, 108, 120, 119,
118, 117, 116, 115, 101, 114, 113, 112, 111, 110,
109, 108, 105, 104, 103, 102, 101, 98, 97, 96,
95, 94, 93, 92, 91, 73, 73, 72, 71, 70,
69, 68, 67, 65, 64, 63, 60, 44, 43, 42,
39, 237, 5, 237, 237, 237, 237, 237, 237, 237,
237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
237, 237, 237, 237, 237, 237
} ;
static yyconst flex_int16_t yy_chk[309] =
static yyconst flex_int16_t yy_chk[357] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
......@@ -542,40 +563,45 @@ static yyconst flex_int16_t yy_chk[309] =
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 11, 11, 12, 12,
19, 19, 26, 26, 27, 27, 28, 191, 28, 34,
34, 44, 45, 53, 53, 186, 46, 47, 48, 11,
20, 49, 50, 51, 55, 26, 55, 66, 184, 20,
182, 20, 181, 68, 70, 20, 72, 74, 20, 76,
78, 20, 44, 45, 20, 20, 20, 46, 47, 48,
80, 179, 49, 50, 51, 54, 54, 131, 66, 54,
54, 54, 54, 54, 68, 70, 96, 72, 74, 135,