widl: Updated to current Wine version.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
diff --git a/mingw-w64-tools/widl/src/expr.c b/mingw-w64-tools/widl/src/expr.c
index c83e9aa..88d5929 100644
--- a/mingw-w64-tools/widl/src/expr.c
+++ b/mingw-w64-tools/widl/src/expr.c
@@ -466,6 +466,7 @@
         case TYPE_RUNTIMECLASS:
         case TYPE_PARAMETERIZED_TYPE:
         case TYPE_PARAMETER:
+        case TYPE_DELEGATE:
             /* nothing to do */
             break;
         case TYPE_ALIAS:
diff --git a/mingw-w64-tools/widl/src/hash.c b/mingw-w64-tools/widl/src/hash.c
index 15ec880..999c223 100644
--- a/mingw-w64-tools/widl/src/hash.c
+++ b/mingw-w64-tools/widl/src/hash.c
@@ -639,3 +639,136 @@
 
   return nHiWord | nLoWord;
 }
+
+/* SHA1 algorithm
+ *
+ * Based on public domain SHA code by Steve Reid <steve@edmweb.com>
+ * Copied and adapted from ntdll.A_SHAInit / ntdll.A_SHAUpdate / ntdll.A_SHAFinal
+ */
+
+#ifdef WORDS_BIGENDIAN
+#define DWORD2BE(x) (x)
+#else
+#define DWORD2BE(x) ((((x) >> 24) & 0xff) | (((x) >> 8) & 0xff00) | (((x) << 8) & 0xff0000) | (((x) << 24) & 0xff000000))
+#endif
+
+#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
+#define blk0(i) (block[i] = DWORD2BE(block[i]))
+#define blk1(i) (block[i&15] = rol(block[(i+13)&15]^block[(i+8)&15]^block[(i+2)&15]^block[i&15],1))
+#define f1(x,y,z) (z^(x&(y^z)))
+#define f2(x,y,z) (x^y^z)
+#define f3(x,y,z) ((x&y)|(z&(x|y)))
+#define f4(x,y,z) (x^y^z)
+/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */
+#define R0(v,w,x,y,z,i) z+=f1(w,x,y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);
+#define R1(v,w,x,y,z,i) z+=f1(w,x,y)+blk1(i)+0x5A827999+rol(v,5);w=rol(w,30);
+#define R2(v,w,x,y,z,i) z+=f2(w,x,y)+blk1(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30);
+#define R3(v,w,x,y,z,i) z+=f3(w,x,y)+blk1(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30);
+#define R4(v,w,x,y,z,i) z+=f4(w,x,y)+blk1(i)+0xCA62C1D6+rol(v,5);w=rol(w,30);
+
+/* Hash a single 512-bit block. This is the core of the algorithm. */
+static void sha1_transform(struct sha1_context *ctx)
+{
+   DWORD a, b, c, d, e, *block = (DWORD *)ctx->buffer;
+
+   /* Copy ctx->state[] to working variables */
+   a = ctx->state[0];
+   b = ctx->state[1];
+   c = ctx->state[2];
+   d = ctx->state[3];
+   e = ctx->state[4];
+
+   /* 4 rounds of 20 operations each. Loop unrolled. */
+   R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
+   R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
+   R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
+   R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
+   R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
+   R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
+   R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
+   R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
+   R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
+   R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
+   R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
+   R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
+   R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
+   R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
+   R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
+   R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
+   R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
+   R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
+   R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
+   R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
+
+   /* Add the working variables back into ctx->state[] */
+   ctx->state[0] += a;
+   ctx->state[1] += b;
+   ctx->state[2] += c;
+   ctx->state[3] += d;
+   ctx->state[4] += e;
+
+   /* Wipe variables */
+   a = b = c = d = e = 0;
+}
+
+void sha1_init(struct sha1_context *ctx)
+{
+   /* SHA1 initialization constants */
+   ctx->state[0] = 0x67452301;
+   ctx->state[1] = 0xEFCDAB89;
+   ctx->state[2] = 0x98BADCFE;
+   ctx->state[3] = 0x10325476;
+   ctx->state[4] = 0xC3D2E1F0;
+   ctx->count[0] = 0;
+   ctx->count[1] = 0;
+}
+
+void sha1_update(struct sha1_context *ctx, const char *data, size_t data_size)
+{
+   size_t buffer_size;
+
+   buffer_size = ctx->count[1] & 63;
+   ctx->count[1] += data_size;
+   if (ctx->count[1] < data_size) ctx->count[0]++;
+   ctx->count[0] += (data_size >> 29);
+
+   if (buffer_size + data_size < 64)
+      memcpy(&ctx->buffer[buffer_size], data, data_size);
+   else
+   {
+      while (buffer_size + data_size >= 64)
+      {
+         memcpy(ctx->buffer + buffer_size, data, 64 - buffer_size);
+         data += 64 - buffer_size;
+         data_size -= 64 - buffer_size;
+         sha1_transform(ctx);
+         buffer_size = 0;
+      }
+      memcpy(ctx->buffer + buffer_size, data, data_size);
+   }
+}
+
+void sha1_finalize(struct sha1_context *ctx, DWORD result[5])
+{
+   unsigned int *count, length_hi, length_lo, i;
+   size_t pad_size, buffer_size;
+   char pad[72];
+
+   buffer_size = ctx->count[1] & 63;
+   if (buffer_size >= 56) pad_size = 56 + 64 - buffer_size;
+   else pad_size = 56 - buffer_size;
+
+   length_hi = (ctx->count[0] << 3) | (ctx->count[1] >> (32 - 3));
+   length_lo = (ctx->count[1] << 3);
+
+   memset(pad + 1, 0, pad_size - 1);
+   pad[0] = 0x80;
+   count = (unsigned int*)(pad + pad_size);
+   count[0] = DWORD2BE(length_hi);
+   count[1] = DWORD2BE(length_lo);
+   sha1_update(ctx, pad, pad_size + 8);
+
+   for (i = 0; i < 5; i++) result[i] = DWORD2BE(ctx->state[i]);
+
+   sha1_init(ctx);
+}
diff --git a/mingw-w64-tools/widl/src/hash.h b/mingw-w64-tools/widl/src/hash.h
index 3c2fd29..f62fe5e 100644
--- a/mingw-w64-tools/widl/src/hash.h
+++ b/mingw-w64-tools/widl/src/hash.h
@@ -22,6 +22,19 @@
 #ifndef __WIDL_HASH_H
 #define __WIDL_HASH_H
 
+#include "windef.h"
+
 extern unsigned int lhash_val_of_name_sys( syskind_t skind, LCID lcid, LPCSTR lpStr);
 
+struct sha1_context
+{
+   DWORD state[5];
+   DWORD count[2];
+   char buffer[64];
+};
+
+void sha1_init(struct sha1_context *ctx);
+void sha1_update(struct sha1_context *ctx, const char *data, size_t data_size);
+void sha1_finalize(struct sha1_context *ctx, DWORD hash[5]);
+
 #endif
diff --git a/mingw-w64-tools/widl/src/header.c b/mingw-w64-tools/widl/src/header.c
index f0f2b39..3c8ad09 100644
--- a/mingw-w64-tools/widl/src/header.c
+++ b/mingw-w64-tools/widl/src/header.c
@@ -470,6 +470,9 @@
       case TYPE_RUNTIMECLASS:
         fprintf(h, "%s", type_get_name(type_runtimeclass_get_default_iface(t), name_type));
         break;
+      case TYPE_DELEGATE:
+        fprintf(h, "%s", type_get_name(type_delegate_get_iface(t), name_type));
+        break;
       case TYPE_VOID:
         fprintf(h, "void");
         break;
@@ -555,6 +558,7 @@
   case TYPE_COCLASS:
   case TYPE_INTERFACE:
   case TYPE_RUNTIMECLASS:
+  case TYPE_DELEGATE:
     break;
   case TYPE_APICONTRACT:
   case TYPE_PARAMETERIZED_TYPE:
@@ -974,7 +978,7 @@
 int is_object(const type_t *iface)
 {
     const attr_t *attr;
-    if (type_is_defined(iface) && type_iface_get_inherit(iface))
+    if (type_is_defined(iface) && (type_get_type(iface) == TYPE_DELEGATE || type_iface_get_inherit(iface)))
         return 1;
     if (iface->attrs) LIST_FOR_EACH_ENTRY( attr, iface->attrs, const attr_t, entry )
         if (attr->type == ATTR_OBJECT || attr->type == ATTR_ODL) return 1;
@@ -1799,9 +1803,10 @@
     switch (stmt->type)
     {
       case STMT_TYPE:
-        if (type_get_type(stmt->u.type) == TYPE_INTERFACE)
+        if (type_get_type(stmt->u.type) == TYPE_INTERFACE || type_get_type(stmt->u.type) == TYPE_DELEGATE)
         {
           type_t *iface = stmt->u.type;
+          if (type_get_type(iface) == TYPE_DELEGATE) iface = type_delegate_get_iface(iface);
           if (is_object(iface) || is_attr(iface->attrs, ATTR_DISPINTERFACE))
           {
             write_forward(header, iface);
@@ -1841,10 +1846,11 @@
     switch (stmt->type)
     {
       case STMT_TYPE:
-        if (type_get_type(stmt->u.type) == TYPE_INTERFACE)
+        if (type_get_type(stmt->u.type) == TYPE_INTERFACE || type_get_type(stmt->u.type) == TYPE_DELEGATE)
         {
-          type_t *iface = stmt->u.type;
-          type_t *async_iface = type_iface_get_async_iface(iface);
+          type_t *iface = stmt->u.type, *async_iface;
+          if (type_get_type(stmt->u.type) == TYPE_DELEGATE) iface = type_delegate_get_iface(iface);
+          async_iface = type_iface_get_async_iface(iface);
           if (is_object(iface)) is_object_interface++;
           if (is_attr(stmt->u.type->attrs, ATTR_DISPINTERFACE) || is_object(stmt->u.type))
           {
diff --git a/mingw-w64-tools/widl/src/parser.l b/mingw-w64-tools/widl/src/parser.l
index 741e9cb..4d3b9d6 100644
--- a/mingw-w64-tools/widl/src/parser.l
+++ b/mingw-w64-tools/widl/src/parser.l
@@ -278,6 +278,7 @@
 	{"cpp_quote",       tCPPQUOTE,       0},
 	{"declare",         tDECLARE,        1},
 	{"default",         tDEFAULT,        0},
+	{"delegate",        tDELEGATE,       1},
 	{"dispinterface",   tDISPINTERFACE,  0},
 	{"double",          tDOUBLE,         0},
 	{"enum",            tENUM,           0},
diff --git a/mingw-w64-tools/widl/src/parser.tab.c b/mingw-w64-tools/widl/src/parser.tab.c
index 10eedce..bf9c0b3 100644
--- a/mingw-w64-tools/widl/src/parser.tab.c
+++ b/mingw-w64-tools/widl/src/parser.tab.c
@@ -122,13 +122,11 @@
 };
 
 static str_list_t *append_str(str_list_t *list, char *str);
-static attr_list_t *append_attr(attr_list_t *list, attr_t *attr);
 static attr_list_t *append_attr_list(attr_list_t *new_list, attr_list_t *old_list);
 static decl_spec_t *make_decl_spec(type_t *type, decl_spec_t *left, decl_spec_t *right,
         enum storage_class stgclass, enum type_qualifier qual, enum function_specifier func_specifier);
 static attr_t *make_attr(enum attr_type type);
 static attr_t *make_attrv(enum attr_type type, unsigned int val);
-static attr_t *make_attrp(enum attr_type type, void *val);
 static attr_t *make_custom_attr(UUID *id, expr_t *pval);
 static expr_list_t *append_expr(expr_list_t *list, expr_t *expr);
 static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, declarator_t *decl, int top);
@@ -183,6 +181,7 @@
 static statement_t *make_statement_typedef(var_list_t *names, int declonly);
 static statement_t *make_statement_import(const char *str);
 static statement_t *make_statement_parameterized_type(type_t *type, typeref_list_t *params);
+static statement_t *make_statement_delegate(type_t *ret, var_list_t *args);
 static statement_list_t *append_statement(statement_list_t *list, statement_t *stmt);
 static statement_list_t *append_statements(statement_list_t *, statement_list_t *);
 static attr_list_t *append_attribs(attr_list_t *, attr_list_t *);
@@ -198,7 +197,7 @@
 static typelib_t *current_typelib;
 
 
-#line 202 "tools/widl/parser.tab.c"
+#line 201 "tools/widl/parser.tab.c"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -298,153 +297,154 @@
     tDECODE = 314,                 /* tDECODE  */
     tDEFAULT = 315,                /* tDEFAULT  */
     tDEFAULTBIND = 316,            /* tDEFAULTBIND  */
-    tDEFAULTCOLLELEM = 317,        /* tDEFAULTCOLLELEM  */
-    tDEFAULTVALUE = 318,           /* tDEFAULTVALUE  */
-    tDEFAULTVTABLE = 319,          /* tDEFAULTVTABLE  */
-    tDISABLECONSISTENCYCHECK = 320, /* tDISABLECONSISTENCYCHECK  */
-    tDISPLAYBIND = 321,            /* tDISPLAYBIND  */
-    tDISPINTERFACE = 322,          /* tDISPINTERFACE  */
-    tDLLNAME = 323,                /* tDLLNAME  */
-    tDONTFREE = 324,               /* tDONTFREE  */
-    tDOUBLE = 325,                 /* tDOUBLE  */
-    tDUAL = 326,                   /* tDUAL  */
-    tENABLEALLOCATE = 327,         /* tENABLEALLOCATE  */
-    tENCODE = 328,                 /* tENCODE  */
-    tENDPOINT = 329,               /* tENDPOINT  */
-    tENTRY = 330,                  /* tENTRY  */
-    tENUM = 331,                   /* tENUM  */
-    tERRORSTATUST = 332,           /* tERRORSTATUST  */
-    tEVENTADD = 333,               /* tEVENTADD  */
-    tEVENTREMOVE = 334,            /* tEVENTREMOVE  */
-    tEXCLUSIVETO = 335,            /* tEXCLUSIVETO  */
-    tEXPLICITHANDLE = 336,         /* tEXPLICITHANDLE  */
-    tEXTERN = 337,                 /* tEXTERN  */
-    tFALSE = 338,                  /* tFALSE  */
-    tFASTCALL = 339,               /* tFASTCALL  */
-    tFAULTSTATUS = 340,            /* tFAULTSTATUS  */
-    tFLAGS = 341,                  /* tFLAGS  */
-    tFLOAT = 342,                  /* tFLOAT  */
-    tFORCEALLOCATE = 343,          /* tFORCEALLOCATE  */
-    tHANDLE = 344,                 /* tHANDLE  */
-    tHANDLET = 345,                /* tHANDLET  */
-    tHELPCONTEXT = 346,            /* tHELPCONTEXT  */
-    tHELPFILE = 347,               /* tHELPFILE  */
-    tHELPSTRING = 348,             /* tHELPSTRING  */
-    tHELPSTRINGCONTEXT = 349,      /* tHELPSTRINGCONTEXT  */
-    tHELPSTRINGDLL = 350,          /* tHELPSTRINGDLL  */
-    tHIDDEN = 351,                 /* tHIDDEN  */
-    tHYPER = 352,                  /* tHYPER  */
-    tID = 353,                     /* tID  */
-    tIDEMPOTENT = 354,             /* tIDEMPOTENT  */
-    tIGNORE = 355,                 /* tIGNORE  */
-    tIIDIS = 356,                  /* tIIDIS  */
-    tIMMEDIATEBIND = 357,          /* tIMMEDIATEBIND  */
-    tIMPLICITHANDLE = 358,         /* tIMPLICITHANDLE  */
-    tIMPORT = 359,                 /* tIMPORT  */
-    tIMPORTLIB = 360,              /* tIMPORTLIB  */
-    tIN = 361,                     /* tIN  */
-    tIN_LINE = 362,                /* tIN_LINE  */
-    tINLINE = 363,                 /* tINLINE  */
-    tINPUTSYNC = 364,              /* tINPUTSYNC  */
-    tINT = 365,                    /* tINT  */
-    tINT32 = 366,                  /* tINT32  */
-    tINT3264 = 367,                /* tINT3264  */
-    tINT64 = 368,                  /* tINT64  */
-    tINTERFACE = 369,              /* tINTERFACE  */
-    tLCID = 370,                   /* tLCID  */
-    tLENGTHIS = 371,               /* tLENGTHIS  */
-    tLIBRARY = 372,                /* tLIBRARY  */
-    tLICENSED = 373,               /* tLICENSED  */
-    tLOCAL = 374,                  /* tLOCAL  */
-    tLONG = 375,                   /* tLONG  */
-    tMARSHALINGBEHAVIOR = 376,     /* tMARSHALINGBEHAVIOR  */
-    tMAYBE = 377,                  /* tMAYBE  */
-    tMESSAGE = 378,                /* tMESSAGE  */
-    tMETHODS = 379,                /* tMETHODS  */
-    tMODULE = 380,                 /* tMODULE  */
-    tMTA = 381,                    /* tMTA  */
-    tNAMESPACE = 382,              /* tNAMESPACE  */
-    tNOCODE = 383,                 /* tNOCODE  */
-    tNONBROWSABLE = 384,           /* tNONBROWSABLE  */
-    tNONCREATABLE = 385,           /* tNONCREATABLE  */
-    tNONE = 386,                   /* tNONE  */
-    tNONEXTENSIBLE = 387,          /* tNONEXTENSIBLE  */
-    tNOTIFY = 388,                 /* tNOTIFY  */
-    tNOTIFYFLAG = 389,             /* tNOTIFYFLAG  */
-    tNULL = 390,                   /* tNULL  */
-    tOBJECT = 391,                 /* tOBJECT  */
-    tODL = 392,                    /* tODL  */
-    tOLEAUTOMATION = 393,          /* tOLEAUTOMATION  */
-    tOPTIMIZE = 394,               /* tOPTIMIZE  */
-    tOPTIONAL = 395,               /* tOPTIONAL  */
-    tOUT = 396,                    /* tOUT  */
-    tPARTIALIGNORE = 397,          /* tPARTIALIGNORE  */
-    tPASCAL = 398,                 /* tPASCAL  */
-    tPOINTERDEFAULT = 399,         /* tPOINTERDEFAULT  */
-    tPRAGMA_WARNING = 400,         /* tPRAGMA_WARNING  */
-    tPROGID = 401,                 /* tPROGID  */
-    tPROPERTIES = 402,             /* tPROPERTIES  */
-    tPROPGET = 403,                /* tPROPGET  */
-    tPROPPUT = 404,                /* tPROPPUT  */
-    tPROPPUTREF = 405,             /* tPROPPUTREF  */
-    tPROXY = 406,                  /* tPROXY  */
-    tPTR = 407,                    /* tPTR  */
-    tPUBLIC = 408,                 /* tPUBLIC  */
-    tRANGE = 409,                  /* tRANGE  */
-    tREADONLY = 410,               /* tREADONLY  */
-    tREF = 411,                    /* tREF  */
-    tREGISTER = 412,               /* tREGISTER  */
-    tREPRESENTAS = 413,            /* tREPRESENTAS  */
-    tREQUESTEDIT = 414,            /* tREQUESTEDIT  */
-    tREQUIRES = 415,               /* tREQUIRES  */
-    tRESTRICTED = 416,             /* tRESTRICTED  */
-    tRETVAL = 417,                 /* tRETVAL  */
-    tRUNTIMECLASS = 418,           /* tRUNTIMECLASS  */
-    tSAFEARRAY = 419,              /* tSAFEARRAY  */
-    tSHORT = 420,                  /* tSHORT  */
-    tSIGNED = 421,                 /* tSIGNED  */
-    tSINGLENODE = 422,             /* tSINGLENODE  */
-    tSIZEIS = 423,                 /* tSIZEIS  */
-    tSIZEOF = 424,                 /* tSIZEOF  */
-    tSMALL = 425,                  /* tSMALL  */
-    tSOURCE = 426,                 /* tSOURCE  */
-    tSTANDARD = 427,               /* tSTANDARD  */
-    tSTATIC = 428,                 /* tSTATIC  */
-    tSTDCALL = 429,                /* tSTDCALL  */
-    tSTRICTCONTEXTHANDLE = 430,    /* tSTRICTCONTEXTHANDLE  */
-    tSTRING = 431,                 /* tSTRING  */
-    tSTRUCT = 432,                 /* tSTRUCT  */
-    tSWITCH = 433,                 /* tSWITCH  */
-    tSWITCHIS = 434,               /* tSWITCHIS  */
-    tSWITCHTYPE = 435,             /* tSWITCHTYPE  */
-    tTHREADING = 436,              /* tTHREADING  */
-    tTRANSMITAS = 437,             /* tTRANSMITAS  */
-    tTRUE = 438,                   /* tTRUE  */
-    tTYPEDEF = 439,                /* tTYPEDEF  */
-    tUIDEFAULT = 440,              /* tUIDEFAULT  */
-    tUNION = 441,                  /* tUNION  */
-    tUNIQUE = 442,                 /* tUNIQUE  */
-    tUNSIGNED = 443,               /* tUNSIGNED  */
-    tUSESGETLASTERROR = 444,       /* tUSESGETLASTERROR  */
-    tUSERMARSHAL = 445,            /* tUSERMARSHAL  */
-    tUUID = 446,                   /* tUUID  */
-    tV1ENUM = 447,                 /* tV1ENUM  */
-    tVARARG = 448,                 /* tVARARG  */
-    tVERSION = 449,                /* tVERSION  */
-    tVIPROGID = 450,               /* tVIPROGID  */
-    tVOID = 451,                   /* tVOID  */
-    tWCHAR = 452,                  /* tWCHAR  */
-    tWIREMARSHAL = 453,            /* tWIREMARSHAL  */
-    tAPARTMENT = 454,              /* tAPARTMENT  */
-    tNEUTRAL = 455,                /* tNEUTRAL  */
-    tSINGLE = 456,                 /* tSINGLE  */
-    tFREE = 457,                   /* tFREE  */
-    tBOTH = 458,                   /* tBOTH  */
-    CAST = 459,                    /* CAST  */
-    PPTR = 460,                    /* PPTR  */
-    POS = 461,                     /* POS  */
-    NEG = 462,                     /* NEG  */
-    ADDRESSOF = 463                /* ADDRESSOF  */
+    tDELEGATE = 317,               /* tDELEGATE  */
+    tDEFAULTCOLLELEM = 318,        /* tDEFAULTCOLLELEM  */
+    tDEFAULTVALUE = 319,           /* tDEFAULTVALUE  */
+    tDEFAULTVTABLE = 320,          /* tDEFAULTVTABLE  */
+    tDISABLECONSISTENCYCHECK = 321, /* tDISABLECONSISTENCYCHECK  */
+    tDISPLAYBIND = 322,            /* tDISPLAYBIND  */
+    tDISPINTERFACE = 323,          /* tDISPINTERFACE  */
+    tDLLNAME = 324,                /* tDLLNAME  */
+    tDONTFREE = 325,               /* tDONTFREE  */
+    tDOUBLE = 326,                 /* tDOUBLE  */
+    tDUAL = 327,                   /* tDUAL  */
+    tENABLEALLOCATE = 328,         /* tENABLEALLOCATE  */
+    tENCODE = 329,                 /* tENCODE  */
+    tENDPOINT = 330,               /* tENDPOINT  */
+    tENTRY = 331,                  /* tENTRY  */
+    tENUM = 332,                   /* tENUM  */
+    tERRORSTATUST = 333,           /* tERRORSTATUST  */
+    tEVENTADD = 334,               /* tEVENTADD  */
+    tEVENTREMOVE = 335,            /* tEVENTREMOVE  */
+    tEXCLUSIVETO = 336,            /* tEXCLUSIVETO  */
+    tEXPLICITHANDLE = 337,         /* tEXPLICITHANDLE  */
+    tEXTERN = 338,                 /* tEXTERN  */
+    tFALSE = 339,                  /* tFALSE  */
+    tFASTCALL = 340,               /* tFASTCALL  */
+    tFAULTSTATUS = 341,            /* tFAULTSTATUS  */
+    tFLAGS = 342,                  /* tFLAGS  */
+    tFLOAT = 343,                  /* tFLOAT  */
+    tFORCEALLOCATE = 344,          /* tFORCEALLOCATE  */
+    tHANDLE = 345,                 /* tHANDLE  */
+    tHANDLET = 346,                /* tHANDLET  */
+    tHELPCONTEXT = 347,            /* tHELPCONTEXT  */
+    tHELPFILE = 348,               /* tHELPFILE  */
+    tHELPSTRING = 349,             /* tHELPSTRING  */
+    tHELPSTRINGCONTEXT = 350,      /* tHELPSTRINGCONTEXT  */
+    tHELPSTRINGDLL = 351,          /* tHELPSTRINGDLL  */
+    tHIDDEN = 352,                 /* tHIDDEN  */
+    tHYPER = 353,                  /* tHYPER  */
+    tID = 354,                     /* tID  */
+    tIDEMPOTENT = 355,             /* tIDEMPOTENT  */
+    tIGNORE = 356,                 /* tIGNORE  */
+    tIIDIS = 357,                  /* tIIDIS  */
+    tIMMEDIATEBIND = 358,          /* tIMMEDIATEBIND  */
+    tIMPLICITHANDLE = 359,         /* tIMPLICITHANDLE  */
+    tIMPORT = 360,                 /* tIMPORT  */
+    tIMPORTLIB = 361,              /* tIMPORTLIB  */
+    tIN = 362,                     /* tIN  */
+    tIN_LINE = 363,                /* tIN_LINE  */
+    tINLINE = 364,                 /* tINLINE  */
+    tINPUTSYNC = 365,              /* tINPUTSYNC  */
+    tINT = 366,                    /* tINT  */
+    tINT32 = 367,                  /* tINT32  */
+    tINT3264 = 368,                /* tINT3264  */
+    tINT64 = 369,                  /* tINT64  */
+    tINTERFACE = 370,              /* tINTERFACE  */
+    tLCID = 371,                   /* tLCID  */
+    tLENGTHIS = 372,               /* tLENGTHIS  */
+    tLIBRARY = 373,                /* tLIBRARY  */
+    tLICENSED = 374,               /* tLICENSED  */
+    tLOCAL = 375,                  /* tLOCAL  */
+    tLONG = 376,                   /* tLONG  */
+    tMARSHALINGBEHAVIOR = 377,     /* tMARSHALINGBEHAVIOR  */
+    tMAYBE = 378,                  /* tMAYBE  */
+    tMESSAGE = 379,                /* tMESSAGE  */
+    tMETHODS = 380,                /* tMETHODS  */
+    tMODULE = 381,                 /* tMODULE  */
+    tMTA = 382,                    /* tMTA  */
+    tNAMESPACE = 383,              /* tNAMESPACE  */
+    tNOCODE = 384,                 /* tNOCODE  */
+    tNONBROWSABLE = 385,           /* tNONBROWSABLE  */
+    tNONCREATABLE = 386,           /* tNONCREATABLE  */
+    tNONE = 387,                   /* tNONE  */
+    tNONEXTENSIBLE = 388,          /* tNONEXTENSIBLE  */
+    tNOTIFY = 389,                 /* tNOTIFY  */
+    tNOTIFYFLAG = 390,             /* tNOTIFYFLAG  */
+    tNULL = 391,                   /* tNULL  */
+    tOBJECT = 392,                 /* tOBJECT  */
+    tODL = 393,                    /* tODL  */
+    tOLEAUTOMATION = 394,          /* tOLEAUTOMATION  */
+    tOPTIMIZE = 395,               /* tOPTIMIZE  */
+    tOPTIONAL = 396,               /* tOPTIONAL  */
+    tOUT = 397,                    /* tOUT  */
+    tPARTIALIGNORE = 398,          /* tPARTIALIGNORE  */
+    tPASCAL = 399,                 /* tPASCAL  */
+    tPOINTERDEFAULT = 400,         /* tPOINTERDEFAULT  */
+    tPRAGMA_WARNING = 401,         /* tPRAGMA_WARNING  */
+    tPROGID = 402,                 /* tPROGID  */
+    tPROPERTIES = 403,             /* tPROPERTIES  */
+    tPROPGET = 404,                /* tPROPGET  */
+    tPROPPUT = 405,                /* tPROPPUT  */
+    tPROPPUTREF = 406,             /* tPROPPUTREF  */
+    tPROXY = 407,                  /* tPROXY  */
+    tPTR = 408,                    /* tPTR  */
+    tPUBLIC = 409,                 /* tPUBLIC  */
+    tRANGE = 410,                  /* tRANGE  */
+    tREADONLY = 411,               /* tREADONLY  */
+    tREF = 412,                    /* tREF  */
+    tREGISTER = 413,               /* tREGISTER  */
+    tREPRESENTAS = 414,            /* tREPRESENTAS  */
+    tREQUESTEDIT = 415,            /* tREQUESTEDIT  */
+    tREQUIRES = 416,               /* tREQUIRES  */
+    tRESTRICTED = 417,             /* tRESTRICTED  */
+    tRETVAL = 418,                 /* tRETVAL  */
+    tRUNTIMECLASS = 419,           /* tRUNTIMECLASS  */
+    tSAFEARRAY = 420,              /* tSAFEARRAY  */
+    tSHORT = 421,                  /* tSHORT  */
+    tSIGNED = 422,                 /* tSIGNED  */
+    tSINGLENODE = 423,             /* tSINGLENODE  */
+    tSIZEIS = 424,                 /* tSIZEIS  */
+    tSIZEOF = 425,                 /* tSIZEOF  */
+    tSMALL = 426,                  /* tSMALL  */
+    tSOURCE = 427,                 /* tSOURCE  */
+    tSTANDARD = 428,               /* tSTANDARD  */
+    tSTATIC = 429,                 /* tSTATIC  */
+    tSTDCALL = 430,                /* tSTDCALL  */
+    tSTRICTCONTEXTHANDLE = 431,    /* tSTRICTCONTEXTHANDLE  */
+    tSTRING = 432,                 /* tSTRING  */
+    tSTRUCT = 433,                 /* tSTRUCT  */
+    tSWITCH = 434,                 /* tSWITCH  */
+    tSWITCHIS = 435,               /* tSWITCHIS  */
+    tSWITCHTYPE = 436,             /* tSWITCHTYPE  */
+    tTHREADING = 437,              /* tTHREADING  */
+    tTRANSMITAS = 438,             /* tTRANSMITAS  */
+    tTRUE = 439,                   /* tTRUE  */
+    tTYPEDEF = 440,                /* tTYPEDEF  */
+    tUIDEFAULT = 441,              /* tUIDEFAULT  */
+    tUNION = 442,                  /* tUNION  */
+    tUNIQUE = 443,                 /* tUNIQUE  */
+    tUNSIGNED = 444,               /* tUNSIGNED  */
+    tUSESGETLASTERROR = 445,       /* tUSESGETLASTERROR  */
+    tUSERMARSHAL = 446,            /* tUSERMARSHAL  */
+    tUUID = 447,                   /* tUUID  */
+    tV1ENUM = 448,                 /* tV1ENUM  */
+    tVARARG = 449,                 /* tVARARG  */
+    tVERSION = 450,                /* tVERSION  */
+    tVIPROGID = 451,               /* tVIPROGID  */
+    tVOID = 452,                   /* tVOID  */
+    tWCHAR = 453,                  /* tWCHAR  */
+    tWIREMARSHAL = 454,            /* tWIREMARSHAL  */
+    tAPARTMENT = 455,              /* tAPARTMENT  */
+    tNEUTRAL = 456,                /* tNEUTRAL  */
+    tSINGLE = 457,                 /* tSINGLE  */
+    tFREE = 458,                   /* tFREE  */
+    tBOTH = 459,                   /* tBOTH  */
+    CAST = 460,                    /* CAST  */
+    PPTR = 461,                    /* PPTR  */
+    POS = 462,                     /* POS  */
+    NEG = 463,                     /* NEG  */
+    ADDRESSOF = 464                /* ADDRESSOF  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
@@ -453,7 +453,7 @@
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 124 "tools/widl/parser.y"
+#line 123 "tools/widl/parser.y"
 
 	attr_t *attr;
 	attr_list_t *attr_list;
@@ -563,318 +563,322 @@
   YYSYMBOL_tDECODE = 59,                   /* tDECODE  */
   YYSYMBOL_tDEFAULT = 60,                  /* tDEFAULT  */
   YYSYMBOL_tDEFAULTBIND = 61,              /* tDEFAULTBIND  */
-  YYSYMBOL_tDEFAULTCOLLELEM = 62,          /* tDEFAULTCOLLELEM  */
-  YYSYMBOL_tDEFAULTVALUE = 63,             /* tDEFAULTVALUE  */
-  YYSYMBOL_tDEFAULTVTABLE = 64,            /* tDEFAULTVTABLE  */
-  YYSYMBOL_tDISABLECONSISTENCYCHECK = 65,  /* tDISABLECONSISTENCYCHECK  */
-  YYSYMBOL_tDISPLAYBIND = 66,              /* tDISPLAYBIND  */
-  YYSYMBOL_tDISPINTERFACE = 67,            /* tDISPINTERFACE  */
-  YYSYMBOL_tDLLNAME = 68,                  /* tDLLNAME  */
-  YYSYMBOL_tDONTFREE = 69,                 /* tDONTFREE  */
-  YYSYMBOL_tDOUBLE = 70,                   /* tDOUBLE  */
-  YYSYMBOL_tDUAL = 71,                     /* tDUAL  */
-  YYSYMBOL_tENABLEALLOCATE = 72,           /* tENABLEALLOCATE  */
-  YYSYMBOL_tENCODE = 73,                   /* tENCODE  */
-  YYSYMBOL_tENDPOINT = 74,                 /* tENDPOINT  */
-  YYSYMBOL_tENTRY = 75,                    /* tENTRY  */
-  YYSYMBOL_tENUM = 76,                     /* tENUM  */
-  YYSYMBOL_tERRORSTATUST = 77,             /* tERRORSTATUST  */
-  YYSYMBOL_tEVENTADD = 78,                 /* tEVENTADD  */
-  YYSYMBOL_tEVENTREMOVE = 79,              /* tEVENTREMOVE  */
-  YYSYMBOL_tEXCLUSIVETO = 80,              /* tEXCLUSIVETO  */
-  YYSYMBOL_tEXPLICITHANDLE = 81,           /* tEXPLICITHANDLE  */
-  YYSYMBOL_tEXTERN = 82,                   /* tEXTERN  */
-  YYSYMBOL_tFALSE = 83,                    /* tFALSE  */
-  YYSYMBOL_tFASTCALL = 84,                 /* tFASTCALL  */
-  YYSYMBOL_tFAULTSTATUS = 85,              /* tFAULTSTATUS  */
-  YYSYMBOL_tFLAGS = 86,                    /* tFLAGS  */
-  YYSYMBOL_tFLOAT = 87,                    /* tFLOAT  */
-  YYSYMBOL_tFORCEALLOCATE = 88,            /* tFORCEALLOCATE  */
-  YYSYMBOL_tHANDLE = 89,                   /* tHANDLE  */
-  YYSYMBOL_tHANDLET = 90,                  /* tHANDLET  */
-  YYSYMBOL_tHELPCONTEXT = 91,              /* tHELPCONTEXT  */
-  YYSYMBOL_tHELPFILE = 92,                 /* tHELPFILE  */
-  YYSYMBOL_tHELPSTRING = 93,               /* tHELPSTRING  */
-  YYSYMBOL_tHELPSTRINGCONTEXT = 94,        /* tHELPSTRINGCONTEXT  */
-  YYSYMBOL_tHELPSTRINGDLL = 95,            /* tHELPSTRINGDLL  */
-  YYSYMBOL_tHIDDEN = 96,                   /* tHIDDEN  */
-  YYSYMBOL_tHYPER = 97,                    /* tHYPER  */
-  YYSYMBOL_tID = 98,                       /* tID  */
-  YYSYMBOL_tIDEMPOTENT = 99,               /* tIDEMPOTENT  */
-  YYSYMBOL_tIGNORE = 100,                  /* tIGNORE  */
-  YYSYMBOL_tIIDIS = 101,                   /* tIIDIS  */
-  YYSYMBOL_tIMMEDIATEBIND = 102,           /* tIMMEDIATEBIND  */
-  YYSYMBOL_tIMPLICITHANDLE = 103,          /* tIMPLICITHANDLE  */
-  YYSYMBOL_tIMPORT = 104,                  /* tIMPORT  */
-  YYSYMBOL_tIMPORTLIB = 105,               /* tIMPORTLIB  */
-  YYSYMBOL_tIN = 106,                      /* tIN  */
-  YYSYMBOL_tIN_LINE = 107,                 /* tIN_LINE  */
-  YYSYMBOL_tINLINE = 108,                  /* tINLINE  */
-  YYSYMBOL_tINPUTSYNC = 109,               /* tINPUTSYNC  */
-  YYSYMBOL_tINT = 110,                     /* tINT  */
-  YYSYMBOL_tINT32 = 111,                   /* tINT32  */
-  YYSYMBOL_tINT3264 = 112,                 /* tINT3264  */
-  YYSYMBOL_tINT64 = 113,                   /* tINT64  */
-  YYSYMBOL_tINTERFACE = 114,               /* tINTERFACE  */
-  YYSYMBOL_tLCID = 115,                    /* tLCID  */
-  YYSYMBOL_tLENGTHIS = 116,                /* tLENGTHIS  */
-  YYSYMBOL_tLIBRARY = 117,                 /* tLIBRARY  */
-  YYSYMBOL_tLICENSED = 118,                /* tLICENSED  */
-  YYSYMBOL_tLOCAL = 119,                   /* tLOCAL  */
-  YYSYMBOL_tLONG = 120,                    /* tLONG  */
-  YYSYMBOL_tMARSHALINGBEHAVIOR = 121,      /* tMARSHALINGBEHAVIOR  */
-  YYSYMBOL_tMAYBE = 122,                   /* tMAYBE  */
-  YYSYMBOL_tMESSAGE = 123,                 /* tMESSAGE  */
-  YYSYMBOL_tMETHODS = 124,                 /* tMETHODS  */
-  YYSYMBOL_tMODULE = 125,                  /* tMODULE  */
-  YYSYMBOL_tMTA = 126,                     /* tMTA  */
-  YYSYMBOL_tNAMESPACE = 127,               /* tNAMESPACE  */
-  YYSYMBOL_tNOCODE = 128,                  /* tNOCODE  */
-  YYSYMBOL_tNONBROWSABLE = 129,            /* tNONBROWSABLE  */
-  YYSYMBOL_tNONCREATABLE = 130,            /* tNONCREATABLE  */
-  YYSYMBOL_tNONE = 131,                    /* tNONE  */
-  YYSYMBOL_tNONEXTENSIBLE = 132,           /* tNONEXTENSIBLE  */
-  YYSYMBOL_tNOTIFY = 133,                  /* tNOTIFY  */
-  YYSYMBOL_tNOTIFYFLAG = 134,              /* tNOTIFYFLAG  */
-  YYSYMBOL_tNULL = 135,                    /* tNULL  */
-  YYSYMBOL_tOBJECT = 136,                  /* tOBJECT  */
-  YYSYMBOL_tODL = 137,                     /* tODL  */
-  YYSYMBOL_tOLEAUTOMATION = 138,           /* tOLEAUTOMATION  */
-  YYSYMBOL_tOPTIMIZE = 139,                /* tOPTIMIZE  */
-  YYSYMBOL_tOPTIONAL = 140,                /* tOPTIONAL  */
-  YYSYMBOL_tOUT = 141,                     /* tOUT  */
-  YYSYMBOL_tPARTIALIGNORE = 142,           /* tPARTIALIGNORE  */
-  YYSYMBOL_tPASCAL = 143,                  /* tPASCAL  */
-  YYSYMBOL_tPOINTERDEFAULT = 144,          /* tPOINTERDEFAULT  */
-  YYSYMBOL_tPRAGMA_WARNING = 145,          /* tPRAGMA_WARNING  */
-  YYSYMBOL_tPROGID = 146,                  /* tPROGID  */
-  YYSYMBOL_tPROPERTIES = 147,              /* tPROPERTIES  */
-  YYSYMBOL_tPROPGET = 148,                 /* tPROPGET  */
-  YYSYMBOL_tPROPPUT = 149,                 /* tPROPPUT  */
-  YYSYMBOL_tPROPPUTREF = 150,              /* tPROPPUTREF  */
-  YYSYMBOL_tPROXY = 151,                   /* tPROXY  */
-  YYSYMBOL_tPTR = 152,                     /* tPTR  */
-  YYSYMBOL_tPUBLIC = 153,                  /* tPUBLIC  */
-  YYSYMBOL_tRANGE = 154,                   /* tRANGE  */
-  YYSYMBOL_tREADONLY = 155,                /* tREADONLY  */
-  YYSYMBOL_tREF = 156,                     /* tREF  */
-  YYSYMBOL_tREGISTER = 157,                /* tREGISTER  */
-  YYSYMBOL_tREPRESENTAS = 158,             /* tREPRESENTAS  */
-  YYSYMBOL_tREQUESTEDIT = 159,             /* tREQUESTEDIT  */
-  YYSYMBOL_tREQUIRES = 160,                /* tREQUIRES  */
-  YYSYMBOL_tRESTRICTED = 161,              /* tRESTRICTED  */
-  YYSYMBOL_tRETVAL = 162,                  /* tRETVAL  */
-  YYSYMBOL_tRUNTIMECLASS = 163,            /* tRUNTIMECLASS  */
-  YYSYMBOL_tSAFEARRAY = 164,               /* tSAFEARRAY  */
-  YYSYMBOL_tSHORT = 165,                   /* tSHORT  */
-  YYSYMBOL_tSIGNED = 166,                  /* tSIGNED  */
-  YYSYMBOL_tSINGLENODE = 167,              /* tSINGLENODE  */
-  YYSYMBOL_tSIZEIS = 168,                  /* tSIZEIS  */
-  YYSYMBOL_tSIZEOF = 169,                  /* tSIZEOF  */
-  YYSYMBOL_tSMALL = 170,                   /* tSMALL  */
-  YYSYMBOL_tSOURCE = 171,                  /* tSOURCE  */
-  YYSYMBOL_tSTANDARD = 172,                /* tSTANDARD  */
-  YYSYMBOL_tSTATIC = 173,                  /* tSTATIC  */
-  YYSYMBOL_tSTDCALL = 174,                 /* tSTDCALL  */
-  YYSYMBOL_tSTRICTCONTEXTHANDLE = 175,     /* tSTRICTCONTEXTHANDLE  */
-  YYSYMBOL_tSTRING = 176,                  /* tSTRING  */
-  YYSYMBOL_tSTRUCT = 177,                  /* tSTRUCT  */
-  YYSYMBOL_tSWITCH = 178,                  /* tSWITCH  */
-  YYSYMBOL_tSWITCHIS = 179,                /* tSWITCHIS  */
-  YYSYMBOL_tSWITCHTYPE = 180,              /* tSWITCHTYPE  */
-  YYSYMBOL_tTHREADING = 181,               /* tTHREADING  */
-  YYSYMBOL_tTRANSMITAS = 182,              /* tTRANSMITAS  */
-  YYSYMBOL_tTRUE = 183,                    /* tTRUE  */
-  YYSYMBOL_tTYPEDEF = 184,                 /* tTYPEDEF  */
-  YYSYMBOL_tUIDEFAULT = 185,               /* tUIDEFAULT  */
-  YYSYMBOL_tUNION = 186,                   /* tUNION  */
-  YYSYMBOL_tUNIQUE = 187,                  /* tUNIQUE  */
-  YYSYMBOL_tUNSIGNED = 188,                /* tUNSIGNED  */
-  YYSYMBOL_tUSESGETLASTERROR = 189,        /* tUSESGETLASTERROR  */
-  YYSYMBOL_tUSERMARSHAL = 190,             /* tUSERMARSHAL  */
-  YYSYMBOL_tUUID = 191,                    /* tUUID  */
-  YYSYMBOL_tV1ENUM = 192,                  /* tV1ENUM  */
-  YYSYMBOL_tVARARG = 193,                  /* tVARARG  */
-  YYSYMBOL_tVERSION = 194,                 /* tVERSION  */
-  YYSYMBOL_tVIPROGID = 195,                /* tVIPROGID  */
-  YYSYMBOL_tVOID = 196,                    /* tVOID  */
-  YYSYMBOL_tWCHAR = 197,                   /* tWCHAR  */
-  YYSYMBOL_tWIREMARSHAL = 198,             /* tWIREMARSHAL  */
-  YYSYMBOL_tAPARTMENT = 199,               /* tAPARTMENT  */
-  YYSYMBOL_tNEUTRAL = 200,                 /* tNEUTRAL  */
-  YYSYMBOL_tSINGLE = 201,                  /* tSINGLE  */
-  YYSYMBOL_tFREE = 202,                    /* tFREE  */
-  YYSYMBOL_tBOTH = 203,                    /* tBOTH  */
-  YYSYMBOL_204_ = 204,                     /* ','  */
-  YYSYMBOL_205_ = 205,                     /* '?'  */
-  YYSYMBOL_206_ = 206,                     /* ':'  */
-  YYSYMBOL_207_ = 207,                     /* '|'  */
-  YYSYMBOL_208_ = 208,                     /* '^'  */
-  YYSYMBOL_209_ = 209,                     /* '&'  */
-  YYSYMBOL_210_ = 210,                     /* '<'  */
-  YYSYMBOL_211_ = 211,                     /* '>'  */
-  YYSYMBOL_212_ = 212,                     /* '-'  */
-  YYSYMBOL_213_ = 213,                     /* '+'  */
-  YYSYMBOL_214_ = 214,                     /* '*'  */
-  YYSYMBOL_215_ = 215,                     /* '/'  */
-  YYSYMBOL_216_ = 216,                     /* '%'  */
-  YYSYMBOL_217_ = 217,                     /* '!'  */
-  YYSYMBOL_218_ = 218,                     /* '~'  */
-  YYSYMBOL_CAST = 219,                     /* CAST  */
-  YYSYMBOL_PPTR = 220,                     /* PPTR  */
-  YYSYMBOL_POS = 221,                      /* POS  */
-  YYSYMBOL_NEG = 222,                      /* NEG  */
-  YYSYMBOL_ADDRESSOF = 223,                /* ADDRESSOF  */
-  YYSYMBOL_224_ = 224,                     /* '.'  */
-  YYSYMBOL_225_ = 225,                     /* '['  */
-  YYSYMBOL_226_ = 226,                     /* ']'  */
-  YYSYMBOL_227_ = 227,                     /* ';'  */
-  YYSYMBOL_228_ = 228,                     /* '{'  */
-  YYSYMBOL_229_ = 229,                     /* '}'  */
-  YYSYMBOL_230_ = 230,                     /* '('  */
-  YYSYMBOL_231_ = 231,                     /* ')'  */
-  YYSYMBOL_232_ = 232,                     /* '='  */
-  YYSYMBOL_YYACCEPT = 233,                 /* $accept  */
-  YYSYMBOL_input = 234,                    /* input  */
-  YYSYMBOL_m_acf = 235,                    /* m_acf  */
-  YYSYMBOL_decl_statements = 236,          /* decl_statements  */
-  YYSYMBOL_decl_block = 237,               /* decl_block  */
-  YYSYMBOL_imp_decl_statements = 238,      /* imp_decl_statements  */
-  YYSYMBOL_imp_decl_block = 239,           /* imp_decl_block  */
-  YYSYMBOL_gbl_statements = 240,           /* gbl_statements  */
-  YYSYMBOL_241_1 = 241,                    /* $@1  */
-  YYSYMBOL_imp_statements = 242,           /* imp_statements  */
-  YYSYMBOL_243_2 = 243,                    /* $@2  */
-  YYSYMBOL_int_statements = 244,           /* int_statements  */
-  YYSYMBOL_semicolon_opt = 245,            /* semicolon_opt  */
-  YYSYMBOL_statement = 246,                /* statement  */
-  YYSYMBOL_pragma_warning = 247,           /* pragma_warning  */
-  YYSYMBOL_warnings = 248,                 /* warnings  */
-  YYSYMBOL_typedecl = 249,                 /* typedecl  */
-  YYSYMBOL_cppquote = 250,                 /* cppquote  */
-  YYSYMBOL_import_start = 251,             /* import_start  */
-  YYSYMBOL_import = 252,                   /* import  */
-  YYSYMBOL_importlib = 253,                /* importlib  */
-  YYSYMBOL_libraryhdr = 254,               /* libraryhdr  */
-  YYSYMBOL_library_start = 255,            /* library_start  */
-  YYSYMBOL_librarydef = 256,               /* librarydef  */
-  YYSYMBOL_m_args = 257,                   /* m_args  */
-  YYSYMBOL_arg_list = 258,                 /* arg_list  */
-  YYSYMBOL_args = 259,                     /* args  */
-  YYSYMBOL_arg = 260,                      /* arg  */
-  YYSYMBOL_array = 261,                    /* array  */
-  YYSYMBOL_m_attributes = 262,             /* m_attributes  */
-  YYSYMBOL_attributes = 263,               /* attributes  */
-  YYSYMBOL_attrib_list = 264,              /* attrib_list  */
-  YYSYMBOL_str_list = 265,                 /* str_list  */
-  YYSYMBOL_marshaling_behavior = 266,      /* marshaling_behavior  */
-  YYSYMBOL_contract_ver = 267,             /* contract_ver  */
-  YYSYMBOL_contract_req = 268,             /* contract_req  */
-  YYSYMBOL_static_attr = 269,              /* static_attr  */
-  YYSYMBOL_attribute = 270,                /* attribute  */
-  YYSYMBOL_uuid_string = 271,              /* uuid_string  */
-  YYSYMBOL_callconv = 272,                 /* callconv  */
-  YYSYMBOL_cases = 273,                    /* cases  */
-  YYSYMBOL_case = 274,                     /* case  */
-  YYSYMBOL_enums = 275,                    /* enums  */
-  YYSYMBOL_enum_list = 276,                /* enum_list  */
-  YYSYMBOL_enum_member = 277,              /* enum_member  */
-  YYSYMBOL_enum = 278,                     /* enum  */
-  YYSYMBOL_enumdef = 279,                  /* enumdef  */
-  YYSYMBOL_m_exprs = 280,                  /* m_exprs  */
-  YYSYMBOL_m_expr = 281,                   /* m_expr  */
-  YYSYMBOL_expr = 282,                     /* expr  */
-  YYSYMBOL_expr_list_int_const = 283,      /* expr_list_int_const  */
-  YYSYMBOL_expr_int_const = 284,           /* expr_int_const  */
-  YYSYMBOL_expr_const = 285,               /* expr_const  */
-  YYSYMBOL_fields = 286,                   /* fields  */
-  YYSYMBOL_field = 287,                    /* field  */
-  YYSYMBOL_ne_union_field = 288,           /* ne_union_field  */
-  YYSYMBOL_ne_union_fields = 289,          /* ne_union_fields  */
-  YYSYMBOL_union_field = 290,              /* union_field  */
-  YYSYMBOL_s_field = 291,                  /* s_field  */
-  YYSYMBOL_funcdef = 292,                  /* funcdef  */
-  YYSYMBOL_declaration = 293,              /* declaration  */
-  YYSYMBOL_m_ident = 294,                  /* m_ident  */
-  YYSYMBOL_m_typename = 295,               /* m_typename  */
-  YYSYMBOL_typename = 296,                 /* typename  */
-  YYSYMBOL_ident = 297,                    /* ident  */
-  YYSYMBOL_base_type = 298,                /* base_type  */
-  YYSYMBOL_m_int = 299,                    /* m_int  */
-  YYSYMBOL_int_std = 300,                  /* int_std  */
-  YYSYMBOL_namespace_pfx = 301,            /* namespace_pfx  */
-  YYSYMBOL_qualified_type = 302,           /* qualified_type  */
-  YYSYMBOL_parameterized_type = 303,       /* parameterized_type  */
-  YYSYMBOL_parameterized_type_arg = 304,   /* parameterized_type_arg  */
-  YYSYMBOL_parameterized_type_args = 305,  /* parameterized_type_args  */
-  YYSYMBOL_coclass = 306,                  /* coclass  */
-  YYSYMBOL_coclassdef = 307,               /* coclassdef  */
-  YYSYMBOL_runtimeclass = 308,             /* runtimeclass  */
-  YYSYMBOL_runtimeclass_def = 309,         /* runtimeclass_def  */
-  YYSYMBOL_apicontract = 310,              /* apicontract  */
-  YYSYMBOL_apicontract_def = 311,          /* apicontract_def  */
-  YYSYMBOL_namespacedef = 312,             /* namespacedef  */
-  YYSYMBOL_class_interfaces = 313,         /* class_interfaces  */
-  YYSYMBOL_class_interface = 314,          /* class_interface  */
-  YYSYMBOL_dispinterface = 315,            /* dispinterface  */
-  YYSYMBOL_dispattributes = 316,           /* dispattributes  */
-  YYSYMBOL_dispint_props = 317,            /* dispint_props  */
-  YYSYMBOL_dispint_meths = 318,            /* dispint_meths  */
-  YYSYMBOL_dispinterfacedef = 319,         /* dispinterfacedef  */
-  YYSYMBOL_inherit = 320,                  /* inherit  */
-  YYSYMBOL_type_parameter = 321,           /* type_parameter  */
-  YYSYMBOL_type_parameters = 322,          /* type_parameters  */
-  YYSYMBOL_interface = 323,                /* interface  */
-  YYSYMBOL_324_3 = 324,                    /* $@3  */
-  YYSYMBOL_325_4 = 325,                    /* $@4  */
-  YYSYMBOL_required_types = 326,           /* required_types  */
-  YYSYMBOL_requires = 327,                 /* requires  */
-  YYSYMBOL_interfacedef = 328,             /* interfacedef  */
-  YYSYMBOL_329_5 = 329,                    /* $@5  */
-  YYSYMBOL_interfaceref = 330,             /* interfaceref  */
-  YYSYMBOL_dispinterfaceref = 331,         /* dispinterfaceref  */
-  YYSYMBOL_module = 332,                   /* module  */
-  YYSYMBOL_moduledef = 333,                /* moduledef  */
-  YYSYMBOL_storage_cls_spec = 334,         /* storage_cls_spec  */
-  YYSYMBOL_function_specifier = 335,       /* function_specifier  */
-  YYSYMBOL_type_qualifier = 336,           /* type_qualifier  */
-  YYSYMBOL_m_type_qual_list = 337,         /* m_type_qual_list  */
-  YYSYMBOL_decl_spec = 338,                /* decl_spec  */
-  YYSYMBOL_unqualified_decl_spec = 339,    /* unqualified_decl_spec  */
-  YYSYMBOL_m_decl_spec_no_type = 340,      /* m_decl_spec_no_type  */
-  YYSYMBOL_decl_spec_no_type = 341,        /* decl_spec_no_type  */
-  YYSYMBOL_declarator = 342,               /* declarator  */
-  YYSYMBOL_direct_declarator = 343,        /* direct_declarator  */
-  YYSYMBOL_abstract_declarator = 344,      /* abstract_declarator  */
-  YYSYMBOL_abstract_declarator_no_direct = 345, /* abstract_declarator_no_direct  */
-  YYSYMBOL_m_abstract_declarator = 346,    /* m_abstract_declarator  */
-  YYSYMBOL_abstract_direct_declarator = 347, /* abstract_direct_declarator  */
-  YYSYMBOL_any_declarator = 348,           /* any_declarator  */
-  YYSYMBOL_any_declarator_no_direct = 349, /* any_declarator_no_direct  */
-  YYSYMBOL_m_any_declarator = 350,         /* m_any_declarator  */
-  YYSYMBOL_any_direct_declarator = 351,    /* any_direct_declarator  */
-  YYSYMBOL_declarator_list = 352,          /* declarator_list  */
-  YYSYMBOL_m_bitfield = 353,               /* m_bitfield  */
-  YYSYMBOL_struct_declarator = 354,        /* struct_declarator  */
-  YYSYMBOL_struct_declarator_list = 355,   /* struct_declarator_list  */
-  YYSYMBOL_init_declarator = 356,          /* init_declarator  */
-  YYSYMBOL_threading_type = 357,           /* threading_type  */
-  YYSYMBOL_pointer_type = 358,             /* pointer_type  */
-  YYSYMBOL_structdef = 359,                /* structdef  */
-  YYSYMBOL_unqualified_type = 360,         /* unqualified_type  */
-  YYSYMBOL_type = 361,                     /* type  */
-  YYSYMBOL_typedef = 362,                  /* typedef  */
-  YYSYMBOL_uniondef = 363,                 /* uniondef  */
-  YYSYMBOL_version = 364,                  /* version  */
-  YYSYMBOL_acf_statements = 365,           /* acf_statements  */
-  YYSYMBOL_acf_int_statements = 366,       /* acf_int_statements  */
-  YYSYMBOL_acf_int_statement = 367,        /* acf_int_statement  */
-  YYSYMBOL_acf_interface = 368,            /* acf_interface  */
-  YYSYMBOL_acf_attributes = 369,           /* acf_attributes  */
-  YYSYMBOL_acf_attribute_list = 370,       /* acf_attribute_list  */
-  YYSYMBOL_acf_attribute = 371,            /* acf_attribute  */
-  YYSYMBOL_allocate_option_list = 372,     /* allocate_option_list  */
-  YYSYMBOL_allocate_option = 373           /* allocate_option  */
+  YYSYMBOL_tDELEGATE = 62,                 /* tDELEGATE  */
+  YYSYMBOL_tDEFAULTCOLLELEM = 63,          /* tDEFAULTCOLLELEM  */
+  YYSYMBOL_tDEFAULTVALUE = 64,             /* tDEFAULTVALUE  */
+  YYSYMBOL_tDEFAULTVTABLE = 65,            /* tDEFAULTVTABLE  */
+  YYSYMBOL_tDISABLECONSISTENCYCHECK = 66,  /* tDISABLECONSISTENCYCHECK  */
+  YYSYMBOL_tDISPLAYBIND = 67,              /* tDISPLAYBIND  */
+  YYSYMBOL_tDISPINTERFACE = 68,            /* tDISPINTERFACE  */
+  YYSYMBOL_tDLLNAME = 69,                  /* tDLLNAME  */
+  YYSYMBOL_tDONTFREE = 70,                 /* tDONTFREE  */
+  YYSYMBOL_tDOUBLE = 71,                   /* tDOUBLE  */
+  YYSYMBOL_tDUAL = 72,                     /* tDUAL  */
+  YYSYMBOL_tENABLEALLOCATE = 73,           /* tENABLEALLOCATE  */
+  YYSYMBOL_tENCODE = 74,                   /* tENCODE  */
+  YYSYMBOL_tENDPOINT = 75,                 /* tENDPOINT  */
+  YYSYMBOL_tENTRY = 76,                    /* tENTRY  */
+  YYSYMBOL_tENUM = 77,                     /* tENUM  */
+  YYSYMBOL_tERRORSTATUST = 78,             /* tERRORSTATUST  */
+  YYSYMBOL_tEVENTADD = 79,                 /* tEVENTADD  */
+  YYSYMBOL_tEVENTREMOVE = 80,              /* tEVENTREMOVE  */
+  YYSYMBOL_tEXCLUSIVETO = 81,              /* tEXCLUSIVETO  */
+  YYSYMBOL_tEXPLICITHANDLE = 82,           /* tEXPLICITHANDLE  */
+  YYSYMBOL_tEXTERN = 83,                   /* tEXTERN  */
+  YYSYMBOL_tFALSE = 84,                    /* tFALSE  */
+  YYSYMBOL_tFASTCALL = 85,                 /* tFASTCALL  */
+  YYSYMBOL_tFAULTSTATUS = 86,              /* tFAULTSTATUS  */
+  YYSYMBOL_tFLAGS = 87,                    /* tFLAGS  */
+  YYSYMBOL_tFLOAT = 88,                    /* tFLOAT  */
+  YYSYMBOL_tFORCEALLOCATE = 89,            /* tFORCEALLOCATE  */
+  YYSYMBOL_tHANDLE = 90,                   /* tHANDLE  */
+  YYSYMBOL_tHANDLET = 91,                  /* tHANDLET  */
+  YYSYMBOL_tHELPCONTEXT = 92,              /* tHELPCONTEXT  */
+  YYSYMBOL_tHELPFILE = 93,                 /* tHELPFILE  */
+  YYSYMBOL_tHELPSTRING = 94,               /* tHELPSTRING  */
+  YYSYMBOL_tHELPSTRINGCONTEXT = 95,        /* tHELPSTRINGCONTEXT  */
+  YYSYMBOL_tHELPSTRINGDLL = 96,            /* tHELPSTRINGDLL  */
+  YYSYMBOL_tHIDDEN = 97,                   /* tHIDDEN  */
+  YYSYMBOL_tHYPER = 98,                    /* tHYPER  */
+  YYSYMBOL_tID = 99,                       /* tID  */
+  YYSYMBOL_tIDEMPOTENT = 100,              /* tIDEMPOTENT  */
+  YYSYMBOL_tIGNORE = 101,                  /* tIGNORE  */
+  YYSYMBOL_tIIDIS = 102,                   /* tIIDIS  */
+  YYSYMBOL_tIMMEDIATEBIND = 103,           /* tIMMEDIATEBIND  */
+  YYSYMBOL_tIMPLICITHANDLE = 104,          /* tIMPLICITHANDLE  */
+  YYSYMBOL_tIMPORT = 105,                  /* tIMPORT  */
+  YYSYMBOL_tIMPORTLIB = 106,               /* tIMPORTLIB  */
+  YYSYMBOL_tIN = 107,                      /* tIN  */
+  YYSYMBOL_tIN_LINE = 108,                 /* tIN_LINE  */
+  YYSYMBOL_tINLINE = 109,                  /* tINLINE  */
+  YYSYMBOL_tINPUTSYNC = 110,               /* tINPUTSYNC  */
+  YYSYMBOL_tINT = 111,                     /* tINT  */
+  YYSYMBOL_tINT32 = 112,                   /* tINT32  */
+  YYSYMBOL_tINT3264 = 113,                 /* tINT3264  */
+  YYSYMBOL_tINT64 = 114,                   /* tINT64  */
+  YYSYMBOL_tINTERFACE = 115,               /* tINTERFACE  */
+  YYSYMBOL_tLCID = 116,                    /* tLCID  */
+  YYSYMBOL_tLENGTHIS = 117,                /* tLENGTHIS  */
+  YYSYMBOL_tLIBRARY = 118,                 /* tLIBRARY  */
+  YYSYMBOL_tLICENSED = 119,                /* tLICENSED  */
+  YYSYMBOL_tLOCAL = 120,                   /* tLOCAL  */
+  YYSYMBOL_tLONG = 121,                    /* tLONG  */
+  YYSYMBOL_tMARSHALINGBEHAVIOR = 122,      /* tMARSHALINGBEHAVIOR  */
+  YYSYMBOL_tMAYBE = 123,                   /* tMAYBE  */
+  YYSYMBOL_tMESSAGE = 124,                 /* tMESSAGE  */
+  YYSYMBOL_tMETHODS = 125,                 /* tMETHODS  */
+  YYSYMBOL_tMODULE = 126,                  /* tMODULE  */
+  YYSYMBOL_tMTA = 127,                     /* tMTA  */
+  YYSYMBOL_tNAMESPACE = 128,               /* tNAMESPACE  */
+  YYSYMBOL_tNOCODE = 129,                  /* tNOCODE  */
+  YYSYMBOL_tNONBROWSABLE = 130,            /* tNONBROWSABLE  */
+  YYSYMBOL_tNONCREATABLE = 131,            /* tNONCREATABLE  */
+  YYSYMBOL_tNONE = 132,                    /* tNONE  */
+  YYSYMBOL_tNONEXTENSIBLE = 133,           /* tNONEXTENSIBLE  */
+  YYSYMBOL_tNOTIFY = 134,                  /* tNOTIFY  */
+  YYSYMBOL_tNOTIFYFLAG = 135,              /* tNOTIFYFLAG  */
+  YYSYMBOL_tNULL = 136,                    /* tNULL  */
+  YYSYMBOL_tOBJECT = 137,                  /* tOBJECT  */
+  YYSYMBOL_tODL = 138,                     /* tODL  */
+  YYSYMBOL_tOLEAUTOMATION = 139,           /* tOLEAUTOMATION  */
+  YYSYMBOL_tOPTIMIZE = 140,                /* tOPTIMIZE  */
+  YYSYMBOL_tOPTIONAL = 141,                /* tOPTIONAL  */
+  YYSYMBOL_tOUT = 142,                     /* tOUT  */
+  YYSYMBOL_tPARTIALIGNORE = 143,           /* tPARTIALIGNORE  */
+  YYSYMBOL_tPASCAL = 144,                  /* tPASCAL  */
+  YYSYMBOL_tPOINTERDEFAULT = 145,          /* tPOINTERDEFAULT  */
+  YYSYMBOL_tPRAGMA_WARNING = 146,          /* tPRAGMA_WARNING  */
+  YYSYMBOL_tPROGID = 147,                  /* tPROGID  */
+  YYSYMBOL_tPROPERTIES = 148,              /* tPROPERTIES  */
+  YYSYMBOL_tPROPGET = 149,                 /* tPROPGET  */
+  YYSYMBOL_tPROPPUT = 150,                 /* tPROPPUT  */
+  YYSYMBOL_tPROPPUTREF = 151,              /* tPROPPUTREF  */
+  YYSYMBOL_tPROXY = 152,                   /* tPROXY  */
+  YYSYMBOL_tPTR = 153,                     /* tPTR  */
+  YYSYMBOL_tPUBLIC = 154,                  /* tPUBLIC  */
+  YYSYMBOL_tRANGE = 155,                   /* tRANGE  */
+  YYSYMBOL_tREADONLY = 156,                /* tREADONLY  */
+  YYSYMBOL_tREF = 157,                     /* tREF  */
+  YYSYMBOL_tREGISTER = 158,                /* tREGISTER  */
+  YYSYMBOL_tREPRESENTAS = 159,             /* tREPRESENTAS  */
+  YYSYMBOL_tREQUESTEDIT = 160,             /* tREQUESTEDIT  */
+  YYSYMBOL_tREQUIRES = 161,                /* tREQUIRES  */
+  YYSYMBOL_tRESTRICTED = 162,              /* tRESTRICTED  */
+  YYSYMBOL_tRETVAL = 163,                  /* tRETVAL  */
+  YYSYMBOL_tRUNTIMECLASS = 164,            /* tRUNTIMECLASS  */
+  YYSYMBOL_tSAFEARRAY = 165,               /* tSAFEARRAY  */
+  YYSYMBOL_tSHORT = 166,                   /* tSHORT  */
+  YYSYMBOL_tSIGNED = 167,                  /* tSIGNED  */
+  YYSYMBOL_tSINGLENODE = 168,              /* tSINGLENODE  */
+  YYSYMBOL_tSIZEIS = 169,                  /* tSIZEIS  */
+  YYSYMBOL_tSIZEOF = 170,                  /* tSIZEOF  */
+  YYSYMBOL_tSMALL = 171,                   /* tSMALL  */
+  YYSYMBOL_tSOURCE = 172,                  /* tSOURCE  */
+  YYSYMBOL_tSTANDARD = 173,                /* tSTANDARD  */
+  YYSYMBOL_tSTATIC = 174,                  /* tSTATIC  */
+  YYSYMBOL_tSTDCALL = 175,                 /* tSTDCALL  */
+  YYSYMBOL_tSTRICTCONTEXTHANDLE = 176,     /* tSTRICTCONTEXTHANDLE  */
+  YYSYMBOL_tSTRING = 177,                  /* tSTRING  */
+  YYSYMBOL_tSTRUCT = 178,                  /* tSTRUCT  */
+  YYSYMBOL_tSWITCH = 179,                  /* tSWITCH  */
+  YYSYMBOL_tSWITCHIS = 180,                /* tSWITCHIS  */
+  YYSYMBOL_tSWITCHTYPE = 181,              /* tSWITCHTYPE  */
+  YYSYMBOL_tTHREADING = 182,               /* tTHREADING  */
+  YYSYMBOL_tTRANSMITAS = 183,              /* tTRANSMITAS  */
+  YYSYMBOL_tTRUE = 184,                    /* tTRUE  */
+  YYSYMBOL_tTYPEDEF = 185,                 /* tTYPEDEF  */
+  YYSYMBOL_tUIDEFAULT = 186,               /* tUIDEFAULT  */
+  YYSYMBOL_tUNION = 187,                   /* tUNION  */
+  YYSYMBOL_tUNIQUE = 188,                  /* tUNIQUE  */
+  YYSYMBOL_tUNSIGNED = 189,                /* tUNSIGNED  */
+  YYSYMBOL_tUSESGETLASTERROR = 190,        /* tUSESGETLASTERROR  */
+  YYSYMBOL_tUSERMARSHAL = 191,             /* tUSERMARSHAL  */
+  YYSYMBOL_tUUID = 192,                    /* tUUID  */
+  YYSYMBOL_tV1ENUM = 193,                  /* tV1ENUM  */
+  YYSYMBOL_tVARARG = 194,                  /* tVARARG  */
+  YYSYMBOL_tVERSION = 195,                 /* tVERSION  */
+  YYSYMBOL_tVIPROGID = 196,                /* tVIPROGID  */
+  YYSYMBOL_tVOID = 197,                    /* tVOID  */
+  YYSYMBOL_tWCHAR = 198,                   /* tWCHAR  */
+  YYSYMBOL_tWIREMARSHAL = 199,             /* tWIREMARSHAL  */
+  YYSYMBOL_tAPARTMENT = 200,               /* tAPARTMENT  */
+  YYSYMBOL_tNEUTRAL = 201,                 /* tNEUTRAL  */
+  YYSYMBOL_tSINGLE = 202,                  /* tSINGLE  */
+  YYSYMBOL_tFREE = 203,                    /* tFREE  */
+  YYSYMBOL_tBOTH = 204,                    /* tBOTH  */
+  YYSYMBOL_205_ = 205,                     /* ','  */
+  YYSYMBOL_206_ = 206,                     /* '?'  */
+  YYSYMBOL_207_ = 207,                     /* ':'  */
+  YYSYMBOL_208_ = 208,                     /* '|'  */
+  YYSYMBOL_209_ = 209,                     /* '^'  */
+  YYSYMBOL_210_ = 210,                     /* '&'  */
+  YYSYMBOL_211_ = 211,                     /* '<'  */
+  YYSYMBOL_212_ = 212,                     /* '>'  */
+  YYSYMBOL_213_ = 213,                     /* '-'  */
+  YYSYMBOL_214_ = 214,                     /* '+'  */
+  YYSYMBOL_215_ = 215,                     /* '*'  */
+  YYSYMBOL_216_ = 216,                     /* '/'  */
+  YYSYMBOL_217_ = 217,                     /* '%'  */
+  YYSYMBOL_218_ = 218,                     /* '!'  */
+  YYSYMBOL_219_ = 219,                     /* '~'  */
+  YYSYMBOL_CAST = 220,                     /* CAST  */
+  YYSYMBOL_PPTR = 221,                     /* PPTR  */
+  YYSYMBOL_POS = 222,                      /* POS  */
+  YYSYMBOL_NEG = 223,                      /* NEG  */
+  YYSYMBOL_ADDRESSOF = 224,                /* ADDRESSOF  */
+  YYSYMBOL_225_ = 225,                     /* '.'  */
+  YYSYMBOL_226_ = 226,                     /* '['  */
+  YYSYMBOL_227_ = 227,                     /* ']'  */
+  YYSYMBOL_228_ = 228,                     /* ';'  */
+  YYSYMBOL_229_ = 229,                     /* '{'  */
+  YYSYMBOL_230_ = 230,                     /* '}'  */
+  YYSYMBOL_231_ = 231,                     /* '('  */
+  YYSYMBOL_232_ = 232,                     /* ')'  */
+  YYSYMBOL_233_ = 233,                     /* '='  */
+  YYSYMBOL_YYACCEPT = 234,                 /* $accept  */
+  YYSYMBOL_input = 235,                    /* input  */
+  YYSYMBOL_m_acf = 236,                    /* m_acf  */
+  YYSYMBOL_decl_statements = 237,          /* decl_statements  */
+  YYSYMBOL_decl_block = 238,               /* decl_block  */
+  YYSYMBOL_imp_decl_statements = 239,      /* imp_decl_statements  */
+  YYSYMBOL_imp_decl_block = 240,           /* imp_decl_block  */
+  YYSYMBOL_gbl_statements = 241,           /* gbl_statements  */
+  YYSYMBOL_242_1 = 242,                    /* $@1  */
+  YYSYMBOL_imp_statements = 243,           /* imp_statements  */
+  YYSYMBOL_244_2 = 244,                    /* $@2  */
+  YYSYMBOL_int_statements = 245,           /* int_statements  */
+  YYSYMBOL_semicolon_opt = 246,            /* semicolon_opt  */
+  YYSYMBOL_statement = 247,                /* statement  */
+  YYSYMBOL_pragma_warning = 248,           /* pragma_warning  */
+  YYSYMBOL_warnings = 249,                 /* warnings  */
+  YYSYMBOL_typedecl = 250,                 /* typedecl  */
+  YYSYMBOL_cppquote = 251,                 /* cppquote  */
+  YYSYMBOL_import_start = 252,             /* import_start  */
+  YYSYMBOL_import = 253,                   /* import  */
+  YYSYMBOL_importlib = 254,                /* importlib  */
+  YYSYMBOL_libraryhdr = 255,               /* libraryhdr  */
+  YYSYMBOL_library_start = 256,            /* library_start  */
+  YYSYMBOL_librarydef = 257,               /* librarydef  */
+  YYSYMBOL_m_args = 258,                   /* m_args  */
+  YYSYMBOL_arg_list = 259,                 /* arg_list  */
+  YYSYMBOL_args = 260,                     /* args  */
+  YYSYMBOL_arg = 261,                      /* arg  */
+  YYSYMBOL_array = 262,                    /* array  */
+  YYSYMBOL_m_attributes = 263,             /* m_attributes  */
+  YYSYMBOL_attributes = 264,               /* attributes  */
+  YYSYMBOL_attrib_list = 265,              /* attrib_list  */
+  YYSYMBOL_str_list = 266,                 /* str_list  */
+  YYSYMBOL_marshaling_behavior = 267,      /* marshaling_behavior  */
+  YYSYMBOL_contract_ver = 268,             /* contract_ver  */
+  YYSYMBOL_contract_req = 269,             /* contract_req  */
+  YYSYMBOL_static_attr = 270,              /* static_attr  */
+  YYSYMBOL_attribute = 271,                /* attribute  */
+  YYSYMBOL_uuid_string = 272,              /* uuid_string  */
+  YYSYMBOL_callconv = 273,                 /* callconv  */
+  YYSYMBOL_cases = 274,                    /* cases  */
+  YYSYMBOL_case = 275,                     /* case  */
+  YYSYMBOL_enums = 276,                    /* enums  */
+  YYSYMBOL_enum_list = 277,                /* enum_list  */
+  YYSYMBOL_enum_member = 278,              /* enum_member  */
+  YYSYMBOL_enum = 279,                     /* enum  */
+  YYSYMBOL_enumdef = 280,                  /* enumdef  */
+  YYSYMBOL_m_exprs = 281,                  /* m_exprs  */
+  YYSYMBOL_m_expr = 282,                   /* m_expr  */
+  YYSYMBOL_expr = 283,                     /* expr  */
+  YYSYMBOL_expr_list_int_const = 284,      /* expr_list_int_const  */
+  YYSYMBOL_expr_int_const = 285,           /* expr_int_const  */
+  YYSYMBOL_expr_const = 286,               /* expr_const  */
+  YYSYMBOL_fields = 287,                   /* fields  */
+  YYSYMBOL_field = 288,                    /* field  */
+  YYSYMBOL_ne_union_field = 289,           /* ne_union_field  */
+  YYSYMBOL_ne_union_fields = 290,          /* ne_union_fields  */
+  YYSYMBOL_union_field = 291,              /* union_field  */
+  YYSYMBOL_s_field = 292,                  /* s_field  */
+  YYSYMBOL_funcdef = 293,                  /* funcdef  */
+  YYSYMBOL_declaration = 294,              /* declaration  */
+  YYSYMBOL_m_ident = 295,                  /* m_ident  */
+  YYSYMBOL_m_typename = 296,               /* m_typename  */
+  YYSYMBOL_typename = 297,                 /* typename  */
+  YYSYMBOL_ident = 298,                    /* ident  */
+  YYSYMBOL_base_type = 299,                /* base_type  */
+  YYSYMBOL_m_int = 300,                    /* m_int  */
+  YYSYMBOL_int_std = 301,                  /* int_std  */
+  YYSYMBOL_namespace_pfx = 302,            /* namespace_pfx  */
+  YYSYMBOL_qualified_type = 303,           /* qualified_type  */
+  YYSYMBOL_parameterized_type = 304,       /* parameterized_type  */
+  YYSYMBOL_parameterized_type_arg = 305,   /* parameterized_type_arg  */
+  YYSYMBOL_parameterized_type_args = 306,  /* parameterized_type_args  */
+  YYSYMBOL_coclass = 307,                  /* coclass  */
+  YYSYMBOL_coclassdef = 308,               /* coclassdef  */
+  YYSYMBOL_runtimeclass = 309,             /* runtimeclass  */
+  YYSYMBOL_runtimeclass_def = 310,         /* runtimeclass_def  */
+  YYSYMBOL_apicontract = 311,              /* apicontract  */
+  YYSYMBOL_apicontract_def = 312,          /* apicontract_def  */
+  YYSYMBOL_namespacedef = 313,             /* namespacedef  */
+  YYSYMBOL_class_interfaces = 314,         /* class_interfaces  */
+  YYSYMBOL_class_interface = 315,          /* class_interface  */
+  YYSYMBOL_dispinterface = 316,            /* dispinterface  */
+  YYSYMBOL_dispattributes = 317,           /* dispattributes  */
+  YYSYMBOL_dispint_props = 318,            /* dispint_props  */
+  YYSYMBOL_dispint_meths = 319,            /* dispint_meths  */
+  YYSYMBOL_dispinterfacedef = 320,         /* dispinterfacedef  */
+  YYSYMBOL_inherit = 321,                  /* inherit  */
+  YYSYMBOL_type_parameter = 322,           /* type_parameter  */
+  YYSYMBOL_type_parameters = 323,          /* type_parameters  */
+  YYSYMBOL_interface = 324,                /* interface  */
+  YYSYMBOL_325_3 = 325,                    /* $@3  */
+  YYSYMBOL_326_4 = 326,                    /* $@4  */
+  YYSYMBOL_delegatedef = 327,              /* delegatedef  */
+  YYSYMBOL_328_5 = 328,                    /* $@5  */
+  YYSYMBOL_329_6 = 329,                    /* $@6  */
+  YYSYMBOL_required_types = 330,           /* required_types  */
+  YYSYMBOL_requires = 331,                 /* requires  */
+  YYSYMBOL_interfacedef = 332,             /* interfacedef  */
+  YYSYMBOL_333_7 = 333,                    /* $@7  */
+  YYSYMBOL_interfaceref = 334,             /* interfaceref  */
+  YYSYMBOL_dispinterfaceref = 335,         /* dispinterfaceref  */
+  YYSYMBOL_module = 336,                   /* module  */
+  YYSYMBOL_moduledef = 337,                /* moduledef  */
+  YYSYMBOL_storage_cls_spec = 338,         /* storage_cls_spec  */
+  YYSYMBOL_function_specifier = 339,       /* function_specifier  */
+  YYSYMBOL_type_qualifier = 340,           /* type_qualifier  */
+  YYSYMBOL_m_type_qual_list = 341,         /* m_type_qual_list  */
+  YYSYMBOL_decl_spec = 342,                /* decl_spec  */
+  YYSYMBOL_unqualified_decl_spec = 343,    /* unqualified_decl_spec  */
+  YYSYMBOL_m_decl_spec_no_type = 344,      /* m_decl_spec_no_type  */
+  YYSYMBOL_decl_spec_no_type = 345,        /* decl_spec_no_type  */
+  YYSYMBOL_declarator = 346,               /* declarator  */
+  YYSYMBOL_direct_declarator = 347,        /* direct_declarator  */
+  YYSYMBOL_abstract_declarator = 348,      /* abstract_declarator  */
+  YYSYMBOL_abstract_declarator_no_direct = 349, /* abstract_declarator_no_direct  */
+  YYSYMBOL_m_abstract_declarator = 350,    /* m_abstract_declarator  */
+  YYSYMBOL_abstract_direct_declarator = 351, /* abstract_direct_declarator  */
+  YYSYMBOL_any_declarator = 352,           /* any_declarator  */
+  YYSYMBOL_any_declarator_no_direct = 353, /* any_declarator_no_direct  */
+  YYSYMBOL_m_any_declarator = 354,         /* m_any_declarator  */
+  YYSYMBOL_any_direct_declarator = 355,    /* any_direct_declarator  */
+  YYSYMBOL_declarator_list = 356,          /* declarator_list  */
+  YYSYMBOL_m_bitfield = 357,               /* m_bitfield  */
+  YYSYMBOL_struct_declarator = 358,        /* struct_declarator  */
+  YYSYMBOL_struct_declarator_list = 359,   /* struct_declarator_list  */
+  YYSYMBOL_init_declarator = 360,          /* init_declarator  */
+  YYSYMBOL_threading_type = 361,           /* threading_type  */
+  YYSYMBOL_pointer_type = 362,             /* pointer_type  */
+  YYSYMBOL_structdef = 363,                /* structdef  */
+  YYSYMBOL_unqualified_type = 364,         /* unqualified_type  */
+  YYSYMBOL_type = 365,                     /* type  */
+  YYSYMBOL_typedef = 366,                  /* typedef  */
+  YYSYMBOL_uniondef = 367,                 /* uniondef  */
+  YYSYMBOL_version = 368,                  /* version  */
+  YYSYMBOL_acf_statements = 369,           /* acf_statements  */
+  YYSYMBOL_acf_int_statements = 370,       /* acf_int_statements  */
+  YYSYMBOL_acf_int_statement = 371,        /* acf_int_statement  */
+  YYSYMBOL_acf_interface = 372,            /* acf_interface  */
+  YYSYMBOL_acf_attributes = 373,           /* acf_attributes  */
+  YYSYMBOL_acf_attribute_list = 374,       /* acf_attribute_list  */
+  YYSYMBOL_acf_attribute = 375,            /* acf_attribute  */
+  YYSYMBOL_allocate_option_list = 376,     /* allocate_option_list  */
+  YYSYMBOL_allocate_option = 377           /* allocate_option  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -1184,19 +1188,19 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  3
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3580
+#define YYLAST   3579
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  233
+#define YYNTOKENS  234
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  141
+#define YYNNTS  144
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  483
+#define YYNRULES  489
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  874
+#define YYNSTATES  893
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   463
+#define YYMAXUTOK   464
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -1213,16 +1217,16 @@
        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,   217,     2,     2,     2,   216,   209,     2,
-     230,   231,   214,   213,   204,   212,   224,   215,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   206,   227,
-     210,   232,   211,   205,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   218,     2,     2,     2,   217,   210,     2,
+     231,   232,   215,   214,   205,   213,   225,   216,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   207,   228,
+     211,   233,   212,   206,     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,   225,     2,   226,   208,     2,     2,     2,     2,     2,
+       2,   226,     2,   227,   209,     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,   228,   207,   229,   218,     2,     2,     2,
+       2,     2,     2,   229,   208,   230,   219,     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,
@@ -1255,63 +1259,63 @@
      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
      175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
      185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   219,
-     220,   221,   222,   223
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     220,   221,   222,   223,   224
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   348,   348,   363,   363,   365,   366,   372,   374,   375,
-     379,   381,   382,   382,   384,   385,   386,   387,   390,   393,
-     394,   396,   397,   399,   400,   401,   402,   405,   406,   407,
-     408,   408,   410,   411,   412,   415,   416,   418,   419,   421,
-     422,   423,   424,   425,   428,   429,   432,   433,   437,   438,
-     439,   440,   441,   442,   443,   446,   454,   462,   463,   467,
-     468,   469,   470,   471,   472,   473,   474,   475,   478,   480,
-     488,   494,   498,   500,   504,   508,   509,   512,   513,   516,
-     517,   521,   526,   533,   537,   538,   541,   542,   546,   549,
-     550,   551,   554,   555,   559,   560,   561,   565,   566,   569,
-     575,   580,   581,   582,   583,   584,   585,   586,   587,   588,
-     589,   590,   591,   592,   593,   594,   595,   596,   597,   598,
-     599,   600,   601,   602,   603,   604,   605,   606,   607,   608,
-     609,   610,   611,   612,   613,   614,   615,   616,   619,   620,
-     621,   622,   623,   624,   625,   626,   627,   628,   629,   630,
-     631,   632,   633,   634,   635,   636,   637,   638,   639,   640,
-     641,   642,   643,   645,   646,   647,   648,   649,   650,   651,
-     652,   653,   654,   655,   656,   657,   658,   659,   660,   661,
-     662,   663,   664,   665,   666,   667,   671,   672,   673,   674,
-     675,   676,   677,   678,   679,   680,   681,   682,   683,   684,
-     685,   686,   687,   688,   689,   690,   691,   692,   693,   694,
-     695,   699,   700,   705,   706,   707,   708,   711,   712,   715,
-     719,   725,   726,   727,   730,   734,   746,   751,   755,   760,
-     763,   764,   767,   768,   771,   772,   773,   774,   775,   776,
-     777,   778,   779,   780,   781,   782,   783,   784,   785,   786,
-     787,   788,   789,   790,   791,   792,   793,   794,   795,   796,
-     797,   798,   799,   800,   801,   802,   803,   804,   805,   806,
-     807,   808,   810,   812,   813,   816,   817,   820,   826,   832,
-     833,   836,   841,   848,   849,   852,   853,   857,   858,   861,
-     865,   871,   879,   883,   888,   889,   892,   893,   896,   897,
-     900,   903,   904,   905,   906,   907,   908,   909,   910,   911,
-     912,   913,   916,   917,   920,   921,   922,   923,   924,   925,
-     926,   927,   928,   932,   933,   937,   938,   941,   946,   947,
-     948,   949,   950,   954,   955,   959,   962,   966,   969,   973,
-     976,   980,   983,   984,   988,   989,   992,   995,   998,   999,
-    1002,  1003,  1007,  1009,  1013,  1014,  1015,  1018,  1022,  1023,
-    1027,  1028,  1028,  1028,  1033,  1034,  1035,  1036,  1038,  1039,
-    1042,  1042,  1055,  1059,  1060,  1064,  1067,  1070,  1075,  1076,
-    1077,  1081,  1085,  1088,  1089,  1092,  1093,  1097,  1099,  1103,
-    1104,  1108,  1109,  1110,  1114,  1116,  1117,  1121,  1122,  1123,
-    1124,  1129,  1131,  1132,  1137,  1139,  1143,  1144,  1149,  1150,
-    1151,  1152,  1156,  1164,  1166,  1167,  1172,  1174,  1178,  1179,
-    1186,  1187,  1188,  1189,  1190,  1194,  1201,  1202,  1205,  1206,
-    1209,  1216,  1217,  1222,  1223,  1227,  1228,  1229,  1230,  1231,
-    1232,  1236,  1237,  1238,  1241,  1245,  1246,  1247,  1248,  1249,
-    1250,  1251,  1252,  1253,  1254,  1258,  1259,  1260,  1263,  1270,
-    1272,  1278,  1279,  1280,  1284,  1285,  1289,  1290,  1294,  1301,
-    1310,  1311,  1315,  1316,  1320,  1322,  1323,  1324,  1328,  1329,
-    1334,  1335,  1336,  1337
+       0,   349,   349,   364,   364,   366,   367,   373,   375,   376,
+     380,   382,   383,   383,   385,   386,   387,   388,   389,   392,
+     395,   396,   398,   399,   401,   402,   403,   404,   407,   408,
+     409,   410,   410,   412,   413,   414,   415,   418,   419,   421,
+     422,   424,   425,   426,   427,   428,   431,   432,   435,   436,
+     440,   441,   442,   443,   444,   445,   446,   449,   457,   465,
+     466,   470,   471,   472,   473,   474,   475,   476,   477,   478,
+     481,   483,   491,   497,   501,   503,   507,   511,   512,   515,
+     516,   519,   520,   524,   529,   536,   540,   541,   544,   545,
+     549,   552,   553,   554,   557,   558,   562,   563,   564,   568,
+     569,   572,   578,   583,   584,   585,   586,   587,   588,   589,
+     590,   591,   592,   593,   594,   595,   596,   597,   598,   599,
+     600,   601,   602,   603,   604,   605,   606,   607,   608,   609,
+     610,   611,   612,   613,   614,   615,   616,   617,   618,   619,
+     622,   623,   624,   625,   626,   627,   628,   629,   630,   631,
+     632,   633,   634,   635,   636,   637,   638,   639,   640,   641,
+     642,   643,   644,   645,   646,   648,   649,   650,   651,   652,
+     653,   654,   655,   656,   657,   658,   659,   660,   661,   662,
+     663,   664,   665,   666,   667,   668,   669,   670,   674,   675,
+     676,   677,   678,   679,   680,   681,   682,   683,   684,   685,
+     686,   687,   688,   689,   690,   691,   692,   693,   694,   695,
+     696,   697,   698,   702,   703,   708,   709,   710,   711,   714,
+     715,   718,   722,   728,   729,   730,   733,   737,   749,   754,
+     758,   763,   766,   767,   770,   771,   774,   775,   776,   777,
+     778,   779,   780,   781,   782,   783,   784,   785,   786,   787,
+     788,   789,   790,   791,   792,   793,   794,   795,   796,   797,
+     798,   799,   800,   801,   802,   803,   804,   805,   806,   807,
+     808,   809,   810,   811,   813,   815,   816,   819,   820,   823,
+     829,   835,   836,   839,   844,   851,   852,   855,   856,   860,
+     861,   864,   868,   874,   882,   886,   891,   892,   895,   896,
+     899,   900,   903,   906,   907,   908,   909,   910,   911,   912,
+     913,   914,   915,   916,   919,   920,   923,   924,   925,   926,
+     927,   928,   929,   930,   931,   935,   936,   940,   941,   944,
+     949,   950,   951,   952,   953,   957,   958,   962,   965,   969,
+     972,   976,   979,   983,   986,   987,   991,   992,   995,   998,
+    1001,  1002,  1005,  1006,  1010,  1012,  1016,  1017,  1018,  1021,
+    1025,  1026,  1030,  1031,  1031,  1031,  1035,  1040,  1041,  1039,
+    1048,  1049,  1050,  1051,  1053,  1054,  1057,  1057,  1070,  1074,
+    1075,  1079,  1082,  1085,  1090,  1091,  1092,  1096,  1100,  1103,
+    1104,  1107,  1108,  1112,  1114,  1118,  1119,  1123,  1124,  1125,
+    1129,  1131,  1132,  1136,  1137,  1138,  1139,  1144,  1146,  1147,
+    1152,  1154,  1158,  1159,  1164,  1165,  1166,  1167,  1171,  1179,
+    1181,  1182,  1187,  1189,  1193,  1194,  1201,  1202,  1203,  1204,
+    1205,  1209,  1216,  1217,  1220,  1221,  1224,  1231,  1232,  1237,
+    1238,  1242,  1243,  1244,  1245,  1246,  1247,  1251,  1252,  1253,
+    1256,  1260,  1261,  1262,  1263,  1264,  1265,  1266,  1267,  1268,
+    1269,  1273,  1274,  1275,  1278,  1285,  1287,  1293,  1294,  1295,
+    1299,  1300,  1304,  1305,  1309,  1316,  1325,  1326,  1330,  1331,
+    1335,  1337,  1338,  1339,  1343,  1344,  1349,  1350,  1351,  1352
 };
 #endif
 
@@ -1338,59 +1342,60 @@
   "tCASE", "tCDECL", "tCHAR", "tCOCLASS", "tCODE", "tCOMMSTATUS", "tCONST",
   "tCONTEXTHANDLE", "tCONTEXTHANDLENOSERIALIZE", "tCONTEXTHANDLESERIALIZE",
   "tCONTRACT", "tCONTRACTVERSION", "tCONTROL", "tCPPQUOTE", "tCUSTOM",
-  "tDECLARE", "tDECODE", "tDEFAULT", "tDEFAULTBIND", "tDEFAULTCOLLELEM",
-  "tDEFAULTVALUE", "tDEFAULTVTABLE", "tDISABLECONSISTENCYCHECK",
-  "tDISPLAYBIND", "tDISPINTERFACE", "tDLLNAME", "tDONTFREE", "tDOUBLE",
-  "tDUAL", "tENABLEALLOCATE", "tENCODE", "tENDPOINT", "tENTRY", "tENUM",
-  "tERRORSTATUST", "tEVENTADD", "tEVENTREMOVE", "tEXCLUSIVETO",
-  "tEXPLICITHANDLE", "tEXTERN", "tFALSE", "tFASTCALL", "tFAULTSTATUS",
-  "tFLAGS", "tFLOAT", "tFORCEALLOCATE", "tHANDLE", "tHANDLET",
-  "tHELPCONTEXT", "tHELPFILE", "tHELPSTRING", "tHELPSTRINGCONTEXT",
-  "tHELPSTRINGDLL", "tHIDDEN", "tHYPER", "tID", "tIDEMPOTENT", "tIGNORE",
-  "tIIDIS", "tIMMEDIATEBIND", "tIMPLICITHANDLE", "tIMPORT", "tIMPORTLIB",
-  "tIN", "tIN_LINE", "tINLINE", "tINPUTSYNC", "tINT", "tINT32", "tINT3264",
-  "tINT64", "tINTERFACE", "tLCID", "tLENGTHIS", "tLIBRARY", "tLICENSED",
-  "tLOCAL", "tLONG", "tMARSHALINGBEHAVIOR", "tMAYBE", "tMESSAGE",
-  "tMETHODS", "tMODULE", "tMTA", "tNAMESPACE", "tNOCODE", "tNONBROWSABLE",
-  "tNONCREATABLE", "tNONE", "tNONEXTENSIBLE", "tNOTIFY", "tNOTIFYFLAG",
-  "tNULL", "tOBJECT", "tODL", "tOLEAUTOMATION", "tOPTIMIZE", "tOPTIONAL",
-  "tOUT", "tPARTIALIGNORE", "tPASCAL", "tPOINTERDEFAULT",
-  "tPRAGMA_WARNING", "tPROGID", "tPROPERTIES", "tPROPGET", "tPROPPUT",
-  "tPROPPUTREF", "tPROXY", "tPTR", "tPUBLIC", "tRANGE", "tREADONLY",
-  "tREF", "tREGISTER", "tREPRESENTAS", "tREQUESTEDIT", "tREQUIRES",
-  "tRESTRICTED", "tRETVAL", "tRUNTIMECLASS", "tSAFEARRAY", "tSHORT",
-  "tSIGNED", "tSINGLENODE", "tSIZEIS", "tSIZEOF", "tSMALL", "tSOURCE",
-  "tSTANDARD", "tSTATIC", "tSTDCALL", "tSTRICTCONTEXTHANDLE", "tSTRING",
-  "tSTRUCT", "tSWITCH", "tSWITCHIS", "tSWITCHTYPE", "tTHREADING",
-  "tTRANSMITAS", "tTRUE", "tTYPEDEF", "tUIDEFAULT", "tUNION", "tUNIQUE",
-  "tUNSIGNED", "tUSESGETLASTERROR", "tUSERMARSHAL", "tUUID", "tV1ENUM",
-  "tVARARG", "tVERSION", "tVIPROGID", "tVOID", "tWCHAR", "tWIREMARSHAL",
-  "tAPARTMENT", "tNEUTRAL", "tSINGLE", "tFREE", "tBOTH", "','", "'?'",
-  "':'", "'|'", "'^'", "'&'", "'<'", "'>'", "'-'", "'+'", "'*'", "'/'",
-  "'%'", "'!'", "'~'", "CAST", "PPTR", "POS", "NEG", "ADDRESSOF", "'.'",
-  "'['", "']'", "';'", "'{'", "'}'", "'('", "')'", "'='", "$accept",
-  "input", "m_acf", "decl_statements", "decl_block", "imp_decl_statements",
-  "imp_decl_block", "gbl_statements", "$@1", "imp_statements", "$@2",
-  "int_statements", "semicolon_opt", "statement", "pragma_warning",
-  "warnings", "typedecl", "cppquote", "import_start", "import",
-  "importlib", "libraryhdr", "library_start", "librarydef", "m_args",
-  "arg_list", "args", "arg", "array", "m_attributes", "attributes",
-  "attrib_list", "str_list", "marshaling_behavior", "contract_ver",
-  "contract_req", "static_attr", "attribute", "uuid_string", "callconv",
-  "cases", "case", "enums", "enum_list", "enum_member", "enum", "enumdef",
-  "m_exprs", "m_expr", "expr", "expr_list_int_const", "expr_int_const",
-  "expr_const", "fields", "field", "ne_union_field", "ne_union_fields",
-  "union_field", "s_field", "funcdef", "declaration", "m_ident",
-  "m_typename", "typename", "ident", "base_type", "m_int", "int_std",
-  "namespace_pfx", "qualified_type", "parameterized_type",
-  "parameterized_type_arg", "parameterized_type_args", "coclass",
-  "coclassdef", "runtimeclass", "runtimeclass_def", "apicontract",
-  "apicontract_def", "namespacedef", "class_interfaces", "class_interface",
-  "dispinterface", "dispattributes", "dispint_props", "dispint_meths",
-  "dispinterfacedef", "inherit", "type_parameter", "type_parameters",
-  "interface", "$@3", "$@4", "required_types", "requires", "interfacedef",
-  "$@5", "interfaceref", "dispinterfaceref", "module", "moduledef",
-  "storage_cls_spec", "function_specifier", "type_qualifier",
+  "tDECLARE", "tDECODE", "tDEFAULT", "tDEFAULTBIND", "tDELEGATE",
+  "tDEFAULTCOLLELEM", "tDEFAULTVALUE", "tDEFAULTVTABLE",
+  "tDISABLECONSISTENCYCHECK", "tDISPLAYBIND", "tDISPINTERFACE", "tDLLNAME",
+  "tDONTFREE", "tDOUBLE", "tDUAL", "tENABLEALLOCATE", "tENCODE",
+  "tENDPOINT", "tENTRY", "tENUM", "tERRORSTATUST", "tEVENTADD",
+  "tEVENTREMOVE", "tEXCLUSIVETO", "tEXPLICITHANDLE", "tEXTERN", "tFALSE",
+  "tFASTCALL", "tFAULTSTATUS", "tFLAGS", "tFLOAT", "tFORCEALLOCATE",
+  "tHANDLE", "tHANDLET", "tHELPCONTEXT", "tHELPFILE", "tHELPSTRING",
+  "tHELPSTRINGCONTEXT", "tHELPSTRINGDLL", "tHIDDEN", "tHYPER", "tID",
+  "tIDEMPOTENT", "tIGNORE", "tIIDIS", "tIMMEDIATEBIND", "tIMPLICITHANDLE",
+  "tIMPORT", "tIMPORTLIB", "tIN", "tIN_LINE", "tINLINE", "tINPUTSYNC",
+  "tINT", "tINT32", "tINT3264", "tINT64", "tINTERFACE", "tLCID",
+  "tLENGTHIS", "tLIBRARY", "tLICENSED", "tLOCAL", "tLONG",
+  "tMARSHALINGBEHAVIOR", "tMAYBE", "tMESSAGE", "tMETHODS", "tMODULE",
+  "tMTA", "tNAMESPACE", "tNOCODE", "tNONBROWSABLE", "tNONCREATABLE",
+  "tNONE", "tNONEXTENSIBLE", "tNOTIFY", "tNOTIFYFLAG", "tNULL", "tOBJECT",
+  "tODL", "tOLEAUTOMATION", "tOPTIMIZE", "tOPTIONAL", "tOUT",
+  "tPARTIALIGNORE", "tPASCAL", "tPOINTERDEFAULT", "tPRAGMA_WARNING",
+  "tPROGID", "tPROPERTIES", "tPROPGET", "tPROPPUT", "tPROPPUTREF",
+  "tPROXY", "tPTR", "tPUBLIC", "tRANGE", "tREADONLY", "tREF", "tREGISTER",
+  "tREPRESENTAS", "tREQUESTEDIT", "tREQUIRES", "tRESTRICTED", "tRETVAL",
+  "tRUNTIMECLASS", "tSAFEARRAY", "tSHORT", "tSIGNED", "tSINGLENODE",
+  "tSIZEIS", "tSIZEOF", "tSMALL", "tSOURCE", "tSTANDARD", "tSTATIC",
+  "tSTDCALL", "tSTRICTCONTEXTHANDLE", "tSTRING", "tSTRUCT", "tSWITCH",
+  "tSWITCHIS", "tSWITCHTYPE", "tTHREADING", "tTRANSMITAS", "tTRUE",
+  "tTYPEDEF", "tUIDEFAULT", "tUNION", "tUNIQUE", "tUNSIGNED",
+  "tUSESGETLASTERROR", "tUSERMARSHAL", "tUUID", "tV1ENUM", "tVARARG",
+  "tVERSION", "tVIPROGID", "tVOID", "tWCHAR", "tWIREMARSHAL", "tAPARTMENT",
+  "tNEUTRAL", "tSINGLE", "tFREE", "tBOTH", "','", "'?'", "':'", "'|'",
+  "'^'", "'&'", "'<'", "'>'", "'-'", "'+'", "'*'", "'/'", "'%'", "'!'",
+  "'~'", "CAST", "PPTR", "POS", "NEG", "ADDRESSOF", "'.'", "'['", "']'",
+  "';'", "'{'", "'}'", "'('", "')'", "'='", "$accept", "input", "m_acf",
+  "decl_statements", "decl_block", "imp_decl_statements", "imp_decl_block",
+  "gbl_statements", "$@1", "imp_statements", "$@2", "int_statements",
+  "semicolon_opt", "statement", "pragma_warning", "warnings", "typedecl",
+  "cppquote", "import_start", "import", "importlib", "libraryhdr",
+  "library_start", "librarydef", "m_args", "arg_list", "args", "arg",
+  "array", "m_attributes", "attributes", "attrib_list", "str_list",
+  "marshaling_behavior", "contract_ver", "contract_req", "static_attr",
+  "attribute", "uuid_string", "callconv", "cases", "case", "enums",
+  "enum_list", "enum_member", "enum", "enumdef", "m_exprs", "m_expr",
+  "expr", "expr_list_int_const", "expr_int_const", "expr_const", "fields",
+  "field", "ne_union_field", "ne_union_fields", "union_field", "s_field",
+  "funcdef", "declaration", "m_ident", "m_typename", "typename", "ident",
+  "base_type", "m_int", "int_std", "namespace_pfx", "qualified_type",
+  "parameterized_type", "parameterized_type_arg",
+  "parameterized_type_args", "coclass", "coclassdef", "runtimeclass",
+  "runtimeclass_def", "apicontract", "apicontract_def", "namespacedef",
+  "class_interfaces", "class_interface", "dispinterface", "dispattributes",
+  "dispint_props", "dispint_meths", "dispinterfacedef", "inherit",
+  "type_parameter", "type_parameters", "interface", "$@3", "$@4",
+  "delegatedef", "$@5", "$@6", "required_types", "requires",
+  "interfacedef", "$@7", "interfaceref", "dispinterfaceref", "module",
+  "moduledef", "storage_cls_spec", "function_specifier", "type_qualifier",
   "m_type_qual_list", "decl_spec", "unqualified_decl_spec",
   "m_decl_spec_no_type", "decl_spec_no_type", "declarator",
   "direct_declarator", "abstract_declarator",
@@ -1438,19 +1443,19 @@
      425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
      435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
      445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
-     455,   456,   457,   458,    44,    63,    58,   124,    94,    38,
-      60,    62,    45,    43,    42,    47,    37,    33,   126,   459,
-     460,   461,   462,   463,    46,    91,    93,    59,   123,   125,
-      40,    41,    61
+     455,   456,   457,   458,   459,    44,    63,    58,   124,    94,
+      38,    60,    62,    45,    43,    42,    47,    37,    33,   126,
+     460,   461,   462,   463,   464,    46,    91,    93,    59,   123,
+     125,    40,    41,    61
 };
 #endif
 
-#define YYPACT_NINF (-651)
+#define YYPACT_NINF (-643)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF (-471)
+#define YYTABLE_NINF (-477)
 
 #define yytable_value_is_error(Yyn) \
   0
@@ -1459,94 +1464,96 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    -651,   128,  1830,  -651,  -110,  -651,   -49,   -25,   352,  -651,
-    -651,  -651,   352,  -651,   -36,   -60,   352,  -651,   358,  -651,
-    -651,  -651,  -651,   103,   171,  -651,  -651,  -651,  -651,  -651,
-     352,   103,   240,    33,  -651,   352,    40,   103,   550,  -651,
-    -651,   370,   374,   550,  -651,  -651,  3382,  -651,  -651,  -651,
-    -651,    25,  -651,  -651,  -651,  -651,  -651,   107,  2891,    69,
-      82,  -651,  -651,  -651,   399,    87,  -651,   101,  -651,   115,
-    -651,   119,  -651,   105,   120,   269,   123,   127,  -651,  -651,
-      52,    52,    52,   130,  3021,   138,  -651,    52,   139,   147,
-    -651,    78,  -651,   -25,   200,  -651,  -651,  -651,  -651,   384,
-    -651,  -651,   -83,   169,  -651,  -651,  -651,   188,   208,  -651,
-    -651,    93,  -651,  3021,  -651,  -651,    10,   196,   -86,   -73,
-    -651,   192,  -651,   195,  -651,  -651,   197,  -651,  -651,  -651,
-     198,   199,  -651,  -651,  -651,  -651,  -651,   201,   202,  -651,
-     203,  -651,  -651,  -651,  -651,   204,  -651,  -651,  -651,   205,
-    -651,  -651,  -651,   207,   209,  -651,  -651,   214,  -651,  -651,
-    -651,  -651,  -651,   216,   217,   218,   219,   220,  -651,   221,
-    -651,  -651,   222,  -651,   232,  -651,  -651,   233,   236,  -651,
-    -651,   237,  -651,  -651,  -651,  -651,  -651,  -651,  -651,  -651,
-    -651,  -651,  -651,   238,  -651,  -651,  -651,   239,   242,  -651,
-    -651,  -651,  -651,  -651,  -651,   248,  -651,  -651,   250,  -651,
-    -651,  -651,   251,  -651,   252,  -651,  -651,   253,   255,   256,
-     258,  -651,  -651,  -651,   259,   260,  -651,  -651,   261,   262,
-     263,  -102,  -651,  -651,  -651,  1986,  1092,   213,   404,   352,
-     352,   405,   408,   267,   243,   268,   271,   272,  -651,   273,
-     130,   275,   277,  -651,   282,   287,  1189,  -651,  -651,  -651,
-    -651,  -651,   283,  -651,  -651,  -651,  -651,  -651,  -651,  -651,
-    -651,  -651,  -651,  -651,  -651,   130,   130,  -651,  -651,   281,
-    -115,  -651,  -651,  -651,    52,  -651,  -651,  -651,   278,  -651,
-    -651,  -651,   -50,  -651,  -651,   421,   284,   -54,   -14,  -651,
-    -651,   306,   308,   288,  -651,   294,  -651,  2993,   516,   276,
-     352,   810,  2993,   522,   276,   810,   530,   532,   810,  2993,
-     810,   534,   535,   810,   537,   810,   810,  2456,   810,   810,
-      55,   539,   -44,   541,   810,  3021,   810,  2993,   810,  3021,
-     -53,  3021,  3021,   276,   270,   545,  3021,  3382,   330,  -651,
-     333,   332,  -651,  -651,  -651,  -651,   336,  -651,   338,  -651,
-     343,  -651,   344,   346,   347,  -651,  -651,   123,  2993,  -651,
-     349,  -651,  -651,   349,   -72,  -651,  -651,  -651,   342,   369,
-    -651,  -651,  -651,  -651,   399,    65,   366,  -651,   -93,  -651,
-     -15,    73,   361,  -651,   810,   247,  2456,  -651,  -651,    57,
-      78,  -651,   368,  -651,   409,  -651,   352,   365,   397,   371,
-    -651,   352,   598,   598,  -651,    81,   213,    86,   375,   401,
-     377,  -651,  -651,   379,   381,  -651,  -651,  -651,  -651,  -651,
-    -651,  -651,  -651,  -651,   383,  -651,   810,   810,   810,   810,
-     810,   810,   872,  2677,  -106,  -651,   387,   390,   388,   411,
-    2677,   389,   391,  -651,  -104,   392,   393,   394,   395,   410,
-     412,   414,   415,   789,   417,  2993,   126,   418,  -101,  -651,
-    2677,  -651,  -651,  -651,   419,   423,   425,   426,   424,   433,
-     -68,   434,   435,  2347,   436,  -651,  -651,  -651,  -651,  -651,
-    -651,   438,   440,   441,   442,   428,  -651,   443,   444,   445,
-    -651,  3382,  -651,   633,  -651,  -651,  -651,  -651,  -651,  -651,
-    -651,   130,    96,   106,   123,   409,   506,  1482,  -651,  -651,
-    -651,  1189,  -651,  1380,   472,   -56,   454,  -651,  -651,  -651,
-    -651,   895,  -651,  2565,   452,   483,  -651,  -651,  -651,  -651,
-    -651,  -651,   -40,  -651,  -651,   504,   485,  -651,  -651,   109,
-     810,  -651,  -651,   489,  -651,    51,    53,  -651,  2993,  -651,
-    2993,   465,  -651,   470,  -651,   471,  -651,   522,  -651,  -651,
-    -651,  3123,    70,    70,    70,    70,    70,    70,  -651,  2460,
-     494,  3225,    52,   810,   810,   696,   810,   810,   810,   810,
-     810,   810,   810,   810,   810,   810,   810,   810,   810,   810,
-     810,   810,   810,   704,   810,   810,  -651,  -651,   705,  -651,
-     810,  -651,  -651,   701,  -651,  -651,  -651,  -651,  -651,  -651,
-    -651,  -651,  -651,  -651,  -651,   126,  -651,  2109,  -651,   126,
-    -651,  -651,  -651,   -13,  -651,   810,  -651,  -651,  -651,  -651,
-    -651,   810,  -651,  -651,  -651,  2993,  -651,  -651,  -651,  -651,
-    -651,  -651,   706,  -651,  -651,  -651,  -651,   -31,   482,  -651,
-    -651,   510,   123,     5,  -651,   123,  -651,    87,  -651,   409,
-     488,   123,  -651,  2993,  -651,  -651,  -651,   511,   491,  1686,
-     493,  -651,  -651,  -651,  2354,    57,  -651,   498,   497,   504,
-    1189,  -651,  -651,   352,   517,  -651,  -651,  -651,   126,   500,
-     130,   114,   352,  -651,  -651,  -651,   494,  -651,  -651,  2232,
-    -651,   494,  -651,   507,    -4,    52,  -651,   175,   175,  -651,
-    1155,  1155,   156,   156,   568,  2031,  2639,   714,  2694,  2701,
-     156,   156,   170,   170,    70,    70,    70,  -651,  2587,  -651,
-    -651,   509,  -651,  -651,   118,  -651,   512,   126,   513,  -651,
-    2456,  -651,  -651,   514,  -651,  -651,   409,  -651,   123,  1236,
-     130,  -651,   352,   409,   515,   520,  -651,    87,  -651,   533,
-    -651,  -651,  -651,  -651,  -651,  2993,   521,  -651,  -651,  -651,
-    -651,  -651,   736,  -651,  -651,   -91,  -651,  -651,   543,  -651,
-     -88,  -651,  -651,   523,  -651,   525,   280,  -651,   526,   126,
-     527,  -651,   810,  2456,  -651,  -651,   810,  -651,  -651,  -651,
-     118,  -651,  -651,  -651,   529,  -651,   551,  -651,  -651,  -651,
-    -651,  -651,   399,  -651,  -651,   409,  1584,  -651,   538,   540,
-     810,  -651,   126,  -651,  -651,  -651,  -651,   118,  -651,  -651,
-    -651,    70,   531,  2677,  -651,  -651,  1189,  -651,    87,  -651,
-     123,  -651,  -651,  -651,  -651,    31,  -651,  -651,   -46,  -651,
-     810,   547,  -651,  -651,   542,   558,   194,  -651,   194,  -651,
-    -651,   544,  -651,  -651
+    -643,   115,  1791,  -643,   -89,  -643,   -39,   -45,   222,  -643,
+    -643,  -643,   222,  -643,     5,   -32,   222,  -643,   288,  -643,
+    -643,  -643,  -643,   138,   249,  -643,  -643,  -643,  -643,  -643,
+     222,   138,   268,    54,  -643,   222,    97,   138,    39,  -643,
+    -643,   301,   369,    39,  -643,  -643,  3380,  -643,  -643,  -643,
+    -643,   118,  -643,  -643,  -643,  -643,  -643,    45,  2860,   125,
+     143,  -643,  -643,  -643,   372,   149,  -643,   148,  -643,   151,
+    -643,   155,  -643,   114,   165,   338,   193,   195,  -643,  -643,
+    -643,   207,   207,   207,   126,  3036,   199,  -643,   207,   200,
+     201,  -643,    75,  -643,   -45,   316,  -643,  -643,  -643,  -643,
+     425,  -643,  -643,   182,   206,  -643,  -643,  -643,   208,   227,
+    -643,  -643,    82,  -643,  3036,  -643,  -643,   188,   210,  -103,
+     -71,  -643,   209,  -643,   211,  -643,  -643,   213,  -643,  -643,
+    -643,   214,   215,  -643,  -643,  -643,  -643,  -643,   216,   220,
+    -643,   228,  -643,  -643,  -643,  -643,   233,  -643,  -643,  -643,
+     234,  -643,  -643,  -643,   235,   236,  -643,  -643,   240,  -643,
+    -643,  -643,  -643,  -643,   242,   243,   244,   245,   247,  -643,
+     248,  -643,  -643,   250,  -643,   251,  -643,  -643,   254,   255,
+    -643,  -643,   256,  -643,  -643,  -643,  -643,  -643,  -643,  -643,
+    -643,  -643,  -643,  -643,   258,  -643,  -643,  -643,   262,   269,
+    -643,  -643,  -643,  -643,  -643,  -643,   270,  -643,  -643,   272,
+    -643,  -643,  -643,   273,  -643,   274,  -643,  -643,   278,   279,
+     280,   283,  -643,  -643,  -643,   285,   286,  -643,  -643,   294,
+     303,   304,  -106,  -643,  -643,  -643,  1937,  1114,  3036,   311,
+     377,   222,   222,   381,   385,   212,   225,   312,   319,   323,
+    -643,   324,   126,   252,   271,  -643,   315,   343,  3098,  -643,
+    -643,  -643,  -643,  -643,   326,  -643,  -643,  -643,  -643,  -643,
+    -643,  -643,  -643,  -643,  -643,  -643,  -643,   126,   126,  -643,
+    -643,   325,  -107,  -643,  -643,  -643,   207,  -643,  -643,  -643,
+     328,  -643,  -643,  -643,   -51,  -643,  -643,   555,   331,   -34,
+     -48,  -643,  -643,   360,   361,   345,  -643,   348,  -643,  2931,
+     571,   314,   222,   725,  2931,   581,   314,   725,   579,   580,
+     725,  2931,   725,   583,   584,   725,   585,   725,   725,  2377,
+     725,   725,    59,   592,   -60,   593,   725,  3036,   725,  2931,
+     725,  3036,   -36,  3036,  3036,   314,   419,   595,  3036,  3380,
+     379,  -643,   378,   375,  -643,  -643,  -643,  -643,   387,  -643,
+     389,  -643,   390,  -643,   384,   391,   395,  -643,  -643,  -643,
+     193,   222,  2931,  -643,   393,  -643,  -643,   393,   -70,  -643,
+    -643,  -643,   396,   417,  -643,  -643,  -643,  -643,   372,   102,
+     412,  -643,   -95,  -643,   -10,   174,   406,  -643,   725,   137,
+    2377,  -643,  -643,    30,    75,  -643,   399,  -643,   394,  -643,
+     222,   409,   435,   408,  -643,   222,   636,   636,  -643,   -17,
+     311,    94,   411,   439,   413,  -643,  -643,   428,   430,  -643,
+    -643,  -643,  -643,  -643,  -643,  -643,  -643,  -643,   432,  -643,
+     725,   725,   725,   725,   725,   725,   923,  2615,  -110,  -643,
+     433,   444,   438,   466,  2615,   442,   443,  -643,  -102,   447,
+     448,   449,   451,   452,   454,   459,   461,   859,   462,  2931,
+     217,   463,   -91,  -643,  2615,  -643,  -643,  -643,   464,   469,
+     471,   472,   468,   474,   -49,   480,   473,  2291,   482,  -643,
+    -643,  -643,  -643,  -643,  -643,   484,   485,   486,   487,   496,
+    -643,   492,   493,   494,  -643,  3380,  -643,   667,  -643,  -643,
+    -643,  -643,  -643,  -643,  -643,    -3,   126,   108,   109,   193,
+     394,   537,  1466,  -643,  -643,  -643,  3098,  -643,  1330,   520,
+     -38,   501,  -643,  -643,  -643,  -643,   575,  -643,  2461,   498,
+     532,  -643,  -643,  -643,  -643,  -643,  -643,   -25,  -643,  -643,
+     553,   528,  -643,  -643,   132,   725,  -643,  -643,   535,  -643,
+      46,    49,  -643,  2931,  -643,  2931,   509,  -643,   514,  -643,
+     515,  -643,   581,  -643,  -643,  -643,  3117,    43,    43,    43,
+      43,    43,    43,  -643,  2376,   446,  3222,   207,   725,   725,
+     741,   725,   725,   725,   725,   725,   725,   725,   725,   725,
+     725,   725,   725,   725,   725,   725,   725,   725,   743,   725,
+     725,  -643,  -643,   742,  -643,   725,  -643,  -643,   738,  -643,
+    -643,  -643,  -643,  -643,  -643,  -643,  -643,  -643,  -643,  -643,
+     217,  -643,  2029,  -643,   217,  -643,  -643,  -643,    53,  -643,
+     725,  -643,  -643,  -643,  -643,  -643,   725,  -643,  -643,  -643,
+    2931,  -643,  -643,  -643,  -643,  -643,  -643,   744,  -643,  -643,
+    -643,  -643,   -27,   517,  -643,  -643,  2377,  -643,   547,   193,
+      24,  -643,   193,  -643,   149,  -643,   394,   524,   193,  -643,
+     570,  2931,  -643,  -643,  -643,   550,   530,  1668,   531,  -643,
+    -643,  -643,  2246,    30,  -643,   534,   533,   553,  3098,  -643,
+    -643,   222,   552,  -643,  -643,  -643,   217,   538,   126,   135,
+     222,  -643,  -643,  -643,   446,  -643,  -643,  2175,  -643,   446,
+    -643,   541,    77,   207,  -643,   383,   383,  -643,   441,   441,
+     281,   281,  2542,  2634,  2594,  2664,  1033,  1463,   281,   281,
+     187,   187,    43,    43,    43,  -643,  2509,  -643,  -643,   542,
+    -643,  -643,   170,  -643,   544,   217,   545,  -643,  2377,  -643,
+    -643,   559,  -643,  -643,   394,  -643,   193,  1259,   222,   560,
+     126,  -643,   222,   394,   551,   554,  -643,   149,  -643,   557,
+    -643,  -643,  -643,  -643,  -643,  2931,   556,  -643,  -643,  -643,
+    -643,  -643,   765,  -643,  -643,   -94,  -643,  -643,   588,  -643,
+     -93,  -643,  -643,   558,  -643,   564,   293,  -643,   565,   217,
+     566,  -643,   725,  2377,  -643,  -643,   725,  -643,  -643,  -643,
+     170,  -643,  -643,  -643,   567,  -643,   589,  -643,  -643,   -92,
+     193,  -643,  -643,  -643,   372,  -643,  -643,   394,  1537,  -643,
+     573,   576,   725,  -643,   217,  -643,  -643,  -643,  -643,   170,
+    -643,  -643,  -643,    43,   578,  2615,  -643,  -643,  3098,   572,
+    -643,  -643,   149,  -643,   193,  -643,  -643,  -643,  -643,    36,
+    -643,  -643,    55,  2377,  -643,   725,   598,  -643,  -643,   586,
+     597,   600,   194,  -643,  -643,   194,  -643,  -643,   587,   193,
+    -643,  -643,  -643
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1554,134 +1561,136 @@
      means the default is an error.  */
 static const yytype_int16 yydefact[] =
 {
-      11,     0,     3,     1,   298,    53,   454,   464,     0,   309,
-     301,   320,     0,   382,     0,     0,     0,   308,   296,   310,
-     378,   307,   311,   312,     0,   381,   314,   321,   322,   319,
-       0,   312,     0,     0,   380,     0,     0,   312,     0,   316,
-     379,   296,   296,   306,   445,   302,   101,     2,    26,    25,
-      54,     0,    48,    27,    51,    27,    24,     0,    87,   447,
-       0,   325,   446,   303,     0,     0,   457,     0,    18,     0,
-      22,     0,    20,     0,     0,     0,    46,     0,    16,    23,
-     389,   389,   389,     0,     0,   449,   455,   389,     0,   451,
-     323,     0,     4,   464,     0,   298,   299,   339,   335,     0,
-       5,   346,   448,     0,   297,   313,   318,     0,   360,   317,
-     341,     0,   337,     0,   315,   304,   450,     0,   452,     0,
-     305,     0,   103,     0,   105,   106,     0,   107,   108,   109,
-       0,     0,   112,   113,   114,   115,   116,     0,     0,   119,
-       0,   121,   122,   123,   124,     0,   126,   127,   128,     0,
-     130,   131,   132,     0,     0,   135,   136,     0,   138,   139,
-     140,   141,   142,     0,     0,     0,     0,     0,   148,     0,
-     150,   151,     0,   153,     0,   155,   156,   159,     0,   160,
-     161,     0,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,     0,   175,   176,   177,     0,     0,   180,
-     181,   182,   183,   443,   184,     0,   186,   441,     0,   188,
-     189,   190,     0,   192,     0,   194,   195,     0,     0,     0,
-       0,   200,   442,   201,     0,     0,   205,   206,     0,     0,
-       0,     0,    89,   210,    49,    86,    86,    86,   296,     0,
-       0,   296,   296,     0,   447,     0,     0,     0,   370,     0,
-       0,   449,   451,    50,   298,   456,     0,    17,    21,    19,
-      12,    15,     0,    47,   372,    14,   393,   390,   392,   391,
-     213,   214,   215,   216,   383,     0,     0,   300,   397,   433,
-     396,   293,   447,   449,   389,   451,   385,    52,     0,   476,
-     475,   477,     0,   472,   465,     0,     0,     0,    86,    69,
-     361,     0,     0,     0,   279,     0,   285,     0,     0,     0,
+      11,     0,    88,     1,   300,    55,   460,   470,     0,   311,
+     303,   322,     0,   388,     0,     0,     0,   310,   298,   312,
+     384,   309,   313,   314,     0,   387,   316,   323,   324,   321,
+       0,   314,     0,     0,   386,     0,     0,   314,     0,   318,
+     385,   298,   298,   308,   451,   304,   103,     2,    27,    26,
+      56,     0,    50,    28,    53,    28,    25,     0,    89,   453,
+       0,   327,   452,   305,     0,     0,   463,     0,    19,     0,
+      23,     0,    21,     0,     0,     0,    48,     0,    17,    16,
+      24,   395,   395,   395,     0,     0,   455,   461,   395,     0,
+     457,   325,     0,     4,   470,     0,   300,   301,   341,   337,
+       0,     5,   348,   454,     0,   299,   315,   320,     0,   362,
+     319,   343,     0,   339,     0,   317,   306,   456,     0,   458,
+       0,   307,     0,   105,     0,   107,   108,     0,   109,   110,
+     111,     0,     0,   114,   115,   116,   117,   118,     0,     0,
+     121,     0,   123,   124,   125,   126,     0,   128,   129,   130,
+       0,   132,   133,   134,     0,     0,   137,   138,     0,   140,
+     141,   142,   143,   144,     0,     0,     0,     0,     0,   150,
+       0,   152,   153,     0,   155,     0,   157,   158,   161,     0,
+     162,   163,     0,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,     0,   177,   178,   179,     0,     0,
+     182,   183,   184,   185,   449,   186,     0,   188,   447,     0,
+     190,   191,   192,     0,   194,     0,   196,   197,     0,     0,
+       0,     0,   202,   448,   203,     0,     0,   207,   208,     0,
+       0,     0,     0,    91,   212,    51,    88,    88,     0,    88,
+     298,     0,     0,   298,   298,     0,   453,     0,     0,     0,
+     376,     0,     0,   455,   457,    52,   300,   462,     0,    18,
+      22,    20,    12,    15,     0,    49,   378,    14,   399,   396,
+     398,   397,   215,   216,   217,   218,   389,     0,     0,   302,
+     403,   439,   402,   295,   453,   455,   395,   457,   391,    54,
+       0,   482,   481,   483,     0,   478,   471,     0,     0,     0,
+      88,    71,   363,     0,     0,     0,   281,     0,   287,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   232,
-       0,     0,     0,     0,     0,     0,   232,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   101,    88,    70,
-       0,     0,    43,    40,    41,    42,     0,    34,     0,    38,
-       0,    36,     0,     0,     0,    32,    39,    46,     0,    87,
-     448,    72,   376,   450,   452,    73,   342,   342,     0,   354,
-      44,   292,   324,   328,     0,   329,   331,   333,     0,    11,
-       0,     0,     0,   395,     0,     0,    75,   399,   386,     0,
-       0,   471,     0,    68,     0,     7,     0,     0,   223,   228,
-     224,     0,     0,     0,   453,    86,    86,    86,     0,     0,
-       0,   212,   211,     0,     0,   243,   234,   235,   236,   240,
-     241,   242,   237,   238,     0,   239,     0,     0,     0,     0,
-       0,     0,     0,   277,     0,   275,     0,    97,     0,     0,
-     278,     0,     0,    92,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   418,     0,     0,   230,
-     233,    94,    95,    96,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   440,   435,   436,   437,   438,
-     439,     0,     0,     0,     0,   461,   463,     0,     0,     0,
-      90,   101,     8,     0,    33,    37,    35,    30,    29,    28,
-      74,     0,    86,    86,    46,     0,   368,    86,   326,   330,
-     332,     0,   327,    86,     0,    86,     0,   384,   394,   398,
-     434,     0,    85,     0,     0,    79,    76,    77,   482,   480,
-     483,   481,     0,   478,   473,   466,     0,   226,   229,    86,
-       0,   357,   358,   362,    57,     0,     0,   444,     0,   280,
-       0,     0,   459,    87,   286,     0,   102,     0,   104,   204,
-     110,     0,   267,   266,   265,   268,   263,   264,   454,     0,
-     406,     0,   389,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   111,   117,     0,   118,
-       0,   125,   129,     0,   133,   134,   137,   143,   144,   145,
-     146,   147,   149,   152,   154,   418,   383,    75,   423,   418,
-     420,   419,    82,   415,   158,   232,   157,   162,   174,   178,
-     179,     0,   187,   191,   193,     0,   196,   197,   199,   198,
-     202,   203,     0,   207,   208,   209,    91,     0,     0,    27,
-     426,   458,    46,     0,   343,    46,   340,   355,   356,     0,
-       0,    46,    45,    87,   334,    13,   348,     0,     0,     0,
-       0,    84,    83,   400,     0,     0,   474,   470,     0,   466,
-       0,   225,   227,     0,     0,    58,    55,    56,     0,   451,
-       0,   449,   294,   284,   283,    99,   406,   274,   383,    75,
-     410,   406,   407,     0,   403,   389,   387,   256,   257,   269,
-     250,   251,   254,   255,   245,   246,     0,   247,   248,   249,
-     253,   252,   259,   258,   261,   262,   260,   270,     0,   276,
-      98,     0,    93,    81,   418,   383,     0,   418,     0,   414,
-      75,   422,   231,     0,   100,   462,     0,    10,    46,    86,
-       0,   336,     0,     0,     0,     0,   338,   364,   365,   369,
-      44,   377,   350,   349,   352,     0,     0,   291,   353,    80,
-      78,   479,     0,   469,   467,     0,   359,   363,   428,   431,
-       0,   282,   289,     0,   295,     0,   406,   383,     0,   418,
-       0,   402,     0,    75,   409,   388,     0,   273,   120,   413,
-     418,   424,   417,   421,     0,   185,     0,    71,    31,   427,
-     375,   373,     0,   344,   345,     0,    86,   351,     0,     0,
-       0,   430,     0,   281,   217,   272,   401,   418,   411,   405,
-     408,   271,     0,   244,   416,   425,     0,   374,   366,   367,
-      46,   468,     6,   429,   432,     0,   404,   412,     0,   371,
-       0,     0,   460,   218,     0,     0,    86,     9,    86,   288,
-     220,     0,   219,   287
+       0,   234,     0,     0,     0,     0,     0,     0,   234,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   103,
+      90,    72,     0,     0,    45,    42,    43,    44,     0,    36,
+       0,    40,     0,    38,     0,     0,     0,    34,    33,    41,
+      48,     0,     0,    89,   454,    74,   382,   456,   458,    75,
+     344,   344,     0,   356,    46,   294,   326,   330,     0,   331,
+     333,   335,     0,    11,     0,     0,     0,   401,     0,     0,
+      77,   405,   392,     0,     0,   477,     0,    70,     0,     7,
+       0,     0,   225,   230,   226,     0,     0,     0,   459,    88,
+      88,    88,     0,     0,     0,   214,   213,     0,     0,   245,
+     236,   237,   238,   242,   243,   244,   239,   240,     0,   241,
+       0,     0,     0,     0,     0,     0,     0,   279,     0,   277,
+       0,    99,     0,     0,   280,     0,     0,    94,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     424,     0,     0,   232,   235,    96,    97,    98,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   446,
+     441,   442,   443,   444,   445,     0,     0,     0,     0,   467,
+     469,     0,     0,     0,    92,   103,     8,     0,    35,    39,
+      37,    31,    30,    29,    76,     0,     0,    88,    88,    48,
+       0,   374,    88,   328,   332,   334,     0,   329,    88,     0,
+      88,     0,   390,   400,   404,   440,     0,    87,     0,     0,
+      81,    78,    79,   488,   486,   489,   487,     0,   484,   479,
+     472,     0,   228,   231,    88,     0,   359,   360,   364,    59,
+       0,     0,   450,     0,   282,     0,     0,   465,    89,   288,
+       0,   104,     0,   106,   206,   112,     0,   269,   268,   267,
+     270,   265,   266,   460,     0,   412,     0,   395,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   113,   119,     0,   120,     0,   127,   131,     0,   135,
+     136,   139,   145,   146,   147,   148,   149,   151,   154,   156,
+     424,   389,    77,   429,   424,   426,   425,    84,   421,   160,
+     234,   159,   164,   176,   180,   181,     0,   189,   193,   195,
+       0,   198,   199,   201,   200,   204,   205,     0,   209,   210,
+     211,    93,     0,     0,    28,   367,    77,   432,   464,    48,
+       0,   345,    48,   342,   357,   358,     0,     0,    48,    47,
+       0,    89,   336,    13,   350,     0,     0,     0,     0,    86,
+      85,   406,     0,     0,   480,   476,     0,   472,     0,   227,
+     229,     0,     0,    60,    57,    58,     0,   457,     0,   455,
+     296,   286,   285,   101,   412,   276,   389,    77,   416,   412,
+     413,     0,   409,   395,   393,   258,   259,   271,   252,   253,
+     256,   257,   247,   248,     0,   249,   250,   251,   255,   254,
+     261,   260,   263,   264,   262,   272,     0,   278,   100,     0,
+      95,    83,   424,   389,     0,   424,     0,   420,    77,   428,
+     233,     0,   102,   468,     0,    10,    48,    88,     0,     0,
+       0,   338,     0,     0,     0,     0,   340,   370,   371,   375,
+      46,   383,   352,   351,   354,     0,     0,   293,   355,    82,
+      80,   485,     0,   475,   473,     0,   361,   365,   434,   437,
+       0,   284,   291,     0,   297,     0,   412,   389,     0,   424,
+       0,   408,     0,    77,   415,   394,     0,   275,   122,   419,
+     424,   430,   423,   427,     0,   187,     0,    73,    32,     0,
+      48,   433,   381,   379,     0,   346,   347,     0,    88,   353,
+       0,     0,     0,   436,     0,   283,   219,   274,   407,   424,
+     417,   411,   414,   273,     0,   246,   422,   431,     0,     0,
+     366,   380,   372,   373,    48,   474,     6,   435,   438,     0,
+     410,   418,     0,    77,   377,     0,     0,   466,   220,     0,
+       0,     0,    88,     9,   368,    88,   290,   222,     0,    48,
+     221,   289,   369
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -651,  -651,  -651,  -651,  -651,  -651,  -651,   396,  -651,   -52,
-    -651,     3,  -313,    -1,  -651,   353,  -651,  -651,  -651,  -651,
-    -651,  -651,  -651,    30,  -557,  -651,  -651,  -292,  -227,  -232,
-       0,  -651,  -651,  -651,   223,  -286,  -651,  -304,  -205,   -71,
-    -651,  -651,  -651,  -651,  -651,   245,    13,   450,   135,   264,
-    -651,  -279,  -297,  -651,  -651,  -651,  -651,   -81,  -322,  -651,
-     110,  -651,    23,    -8,   -69,  -247,   158,   185,  -216,  -214,
-    -249,   279,  -627,    22,    34,    26,    35,    28,    36,    37,
-     420,  -651,    29,  -651,  -651,  -651,  -651,  -651,    95,  -651,
-      11,  -651,  -651,  -651,  -651,    43,  -651,  -651,  -651,  -651,
-      45,  -651,  -651,  -339,  -568,   -29,   225,   -62,   -64,  -225,
-    -651,  -651,  -651,  -618,  -651,  -650,  -651,  -548,  -651,  -651,
-    -651,   -34,  -651,   549,  -651,   469,     4,  -363,   -23,  -651,
-       9,  -651,   722,   133,  -651,  -651,   136,  -651,   427,  -651,
-     143
+    -643,  -643,  -643,  -643,  -643,  -643,  -643,   420,  -643,   -50,
+    -643,    32,  -254,     0,  -643,   400,  -643,  -643,  -643,  -643,
+    -643,  -643,  -643,    28,  -584,  -643,  -643,  -323,  -231,  -235,
+      -2,  -643,  -643,  -643,   246,  -291,  -643,  -281,  -222,   -83,
+    -643,  -643,  -643,  -643,  -643,   266,    16,   478,   181,   382,
+    -643,  -280,  -271,  -643,  -643,  -643,  -643,   -54,  -331,  -643,
+     145,  -643,    20,    -1,   -62,  -238,   124,   163,  -246,  -221,
+    -226,   308,  -641,    17,    29,    19,    33,    22,    34,    37,
+     456,  -643,    23,  -643,  -643,  -643,  -643,  -643,   129,    67,
+      14,  -643,  -643,    41,  -643,  -643,  -643,  -643,    42,  -643,
+    -643,  -643,  -643,    44,  -643,  -643,  -357,  -553,     1,   264,
+     -74,   -55,  -224,  -643,  -643,  -643,  -613,  -643,  -642,  -643,
+    -563,  -643,  -643,  -643,     3,  -643,   590,  -643,   507,     8,
+    -314,   -12,  -643,    11,  -643,   750,   153,  -643,  -643,   150,
+    -643,   453,  -643,   158
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,    47,   297,    48,   657,   352,     2,   389,   235,
-     659,   517,   264,   353,    50,   555,    51,    52,    53,    54,
-     354,   243,    55,   355,   534,   535,   536,   537,   628,    57,
-     369,   231,   454,   474,   448,   418,   481,   232,   423,   629,
-     855,   863,   407,   408,   409,   410,   282,   468,   469,   443,
-     444,   445,   451,   415,   559,   564,   417,   870,   871,   776,
-      60,   793,   103,    61,   630,    62,   106,    63,    64,    65,
-      66,   387,   388,   356,   357,   358,   359,   360,   361,   362,
-     512,   664,   363,    75,   525,   679,    76,   516,   552,   553,
-     364,   411,   694,   769,   670,   365,   379,   764,   765,   249,
-     366,    80,    81,    82,   391,    83,   580,   266,    84,   279,
-     280,   712,   800,   713,   714,   631,   748,   632,   633,   661,
-     831,   789,   790,   281,   491,   233,   283,    86,    87,    88,
-     285,   497,    92,   688,   689,    93,    94,   292,   293,   542,
-     543
+      -1,     1,    47,   299,    48,   662,   354,     2,   393,   236,
+     664,   522,   266,   355,    50,   560,    51,    52,    53,    54,
+     356,   245,    55,   357,   539,   540,   541,   542,   633,    57,
+     373,   232,   458,   478,   452,   422,   485,   233,   427,   634,
+     869,   878,   411,   412,   413,   414,   284,   472,   473,   447,
+     448,   449,   455,   419,   564,   569,   421,   887,   888,   786,
+      60,   803,   104,    61,   635,    62,   107,    63,    64,    65,
+      66,   391,   392,   358,   359,   360,   361,   362,   363,   364,
+     517,   671,   365,    75,   530,   687,    76,   521,   557,   558,
+     366,   415,   702,   367,   768,   889,   779,   677,   368,   383,
+     774,   775,   251,   369,    81,    82,    83,   395,   470,   585,
+     268,    85,   281,   282,   720,   810,   721,   722,   636,   756,
+     637,   638,   668,   843,   799,   800,   283,   495,   234,   285,
+      87,    88,    89,   287,   501,    93,   696,   697,    94,    95,
+     294,   295,   547,   548
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1689,930 +1698,930 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      97,    49,    58,   236,    98,   368,    85,   386,   101,   383,
-     104,    89,   276,    77,   278,    59,   267,   267,   267,   268,
-     269,   455,   108,   267,    67,   286,   446,   112,    69,   250,
-      71,    74,    56,   104,   104,   464,    68,    70,    72,    73,
-     384,   457,   385,   500,   460,    78,   462,    79,   788,   467,
-     392,   393,   527,   397,   510,   478,   255,   695,   744,   695,
-     404,   284,   251,   785,   117,   119,   406,   252,   677,   248,
-     746,   244,   762,   485,   860,   277,    95,   743,    96,   582,
-     245,   749,   471,   756,   246,   538,   247,   585,   795,  -470,
-     303,   861,  -298,   801,   561,   565,   301,   530,   605,    30,
-     613,    13,   347,   635,   262,   305,  -298,   288,   203,   449,
-     395,   521,   207,   521,    90,   396,   832,   270,   522,   763,
-     829,    95,    13,    96,   348,   606,   539,   614,     3,    95,
-     636,    96,   524,    95,    20,    96,   635,   289,   494,   833,
-     796,   -64,  -298,   222,   -60,  -298,   486,   487,   488,   489,
-     490,   290,   798,   302,   400,   306,  -298,   271,   521,   291,
-      25,  -299,   270,   643,   685,   864,   528,    13,   100,    46,
-     270,   583,   584,   585,   270,   405,   401,   810,   836,   276,
-     107,   278,   788,   558,   560,   560,   472,   585,   384,   109,
-     546,   686,   585,   814,    99,   114,   809,   656,   757,   812,
-      91,   666,   271,   678,   276,   276,   278,   278,   582,    34,
-     271,    46,   395,   105,   271,  -221,   272,   750,   715,   858,
-     267,   395,   398,   115,   540,    40,   803,   473,   120,   837,
-     104,   371,   372,   104,   104,    58,    58,   -62,  -298,    85,
-      85,   424,   277,   110,    89,    89,   842,   273,    59,    59,
-     425,   839,   234,   426,   427,   428,   429,   430,   431,   541,
-     862,   272,   844,   111,   117,   119,   668,   277,   277,   272,
-     113,   692,   386,   272,   383,   256,   495,   496,   419,   519,
-     663,   663,   696,   419,   697,   421,   660,   274,   422,   856,
-     456,   237,   273,   560,   603,   604,   -59,   256,   466,   384,
-     273,   667,   277,   275,   273,   384,    46,   385,   482,   253,
-     557,    46,   479,   741,   295,   562,   484,   406,   492,   493,
-     276,    46,   278,   499,   270,   662,   739,   465,   257,    13,
-     432,    46,   626,   260,    46,   665,    16,   547,  -222,   511,
-     626,  -290,   258,   395,   274,  -290,   259,   261,   627,   761,
-     263,   395,   766,   710,   265,    95,   627,    96,   771,   754,
-     275,   102,   753,    96,   271,   -61,   287,   466,   598,   599,
-     600,   601,   602,   116,   -63,    96,   518,   118,   581,    96,
-     603,   604,   433,   277,   600,   601,   602,   598,   599,   600,
-     601,   602,   780,   296,   603,   604,   465,   298,   277,   603,
-     604,   526,   254,   551,    96,   527,   751,   370,   373,    96,
-      96,   374,     4,    96,    96,   299,   434,   563,   300,    46,
-     768,   869,   307,   272,   304,   308,   402,   309,   310,   311,
-     435,   312,   313,   314,   315,   316,   625,   317,    46,   318,
-     276,   386,   278,   383,   319,   817,   320,   321,   322,   323,
-     324,   325,   326,   384,   273,   767,   436,   527,   277,   437,
-     438,   531,   327,   328,   440,   441,   329,   330,   331,   332,
-     -65,   527,   333,   532,   384,   792,   385,   442,   334,   710,
-     335,   336,   337,   338,   710,   339,   340,   804,   341,   342,
-     343,   344,   345,   346,   708,   375,   376,  -326,   527,   377,
-     378,   380,   -66,   277,   -67,   395,   382,   581,   399,   711,
-     709,   390,   412,   394,   413,   403,   672,   673,   267,   414,
-     716,    85,    49,    58,   416,   420,    89,    85,   447,   698,
-      59,   700,    89,   853,    77,   819,    59,   859,   270,   452,
-     384,   453,   816,   458,   459,    67,   461,   822,   475,    69,
-     477,    71,    74,    56,   498,   501,   747,    68,    70,    72,
-      73,   502,   503,   504,   701,   505,    78,   699,    79,   710,
-     506,   514,   507,   508,   509,   515,   849,  -298,   271,   450,
-     520,   865,   450,   583,   584,   585,   586,   587,   588,   589,
-     463,   591,   529,   470,   548,    11,   545,   386,   466,   383,
-     470,   549,   483,   550,   554,   567,   566,   759,   568,   384,
-     569,   848,   570,   571,   608,   610,   419,   277,   607,   609,
-     611,   277,   612,   615,   616,   617,   618,   465,   641,   276,
-     384,   278,   385,   794,   560,   711,   560,   272,   799,   645,
-     711,   619,   658,   620,   250,   621,   622,    23,   624,   634,
-     637,   267,   652,   805,   638,   466,   639,   640,   450,   533,
-      26,    27,    28,    29,   642,   644,   669,   647,   273,   648,
-      31,   649,   650,   651,   653,   654,   655,   251,   676,   775,
-     466,   680,   252,   683,   465,   551,   244,   684,   687,   276,
-     277,   278,   277,   693,   277,   690,   702,   703,   704,   719,
-     572,   573,   574,   575,   576,   577,   579,   737,   708,   465,
-     742,   740,   755,   758,   760,    37,   770,   772,   773,   395,
-      39,   466,   778,    91,   709,   711,   783,   791,   787,   583,
-     584,   585,   586,   587,   588,   589,   277,   825,   802,   277,
-     808,   828,   823,   811,   813,   815,   250,   824,   827,   830,
-     465,   834,   277,   866,   820,   821,   835,   838,   840,    58,
-     845,   846,   857,    85,   868,   851,   556,   852,    89,   867,
-     752,   873,    59,   826,   466,   593,   594,   595,   596,   597,
-     598,   599,   600,   601,   602,   523,   480,   872,   786,   777,
-     705,   277,   603,   604,   691,   575,   706,   513,   854,   381,
-     674,   476,   277,   465,   583,   584,   585,   586,   587,   588,
-     589,   590,   591,   425,   847,   294,   426,   427,   428,   429,
-     430,   431,   784,   782,   277,   672,   673,   544,   781,   277,
-      85,     0,     0,     0,     0,    89,     0,     0,     0,    59,
-       0,     0,     0,     0,     0,     0,     0,   717,   718,     0,
-     720,   721,   722,   723,   724,   725,   726,   727,   728,   729,
-     730,   731,   732,   733,   734,   735,   736,     0,   738,     0,
-       0,     0,     0,     0,   450,   425,     0,   578,   426,   427,
-     428,   429,   430,   431,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   432,     0,     0,     0,     0,   425,   470,
-       0,   426,   427,   428,   429,   430,   431,     0,     0,     9,
-       0,    10,     0,     0,     0,     0,     0,    11,     0,     0,
-       0,    13,   594,   595,   596,   597,   598,   599,   600,   601,
-     602,     0,     0,     0,     0,     0,     0,     0,   603,   604,
-       0,     0,    17,     0,     0,   433,     0,     0,   238,    19,
-       0,     0,     0,     0,    20,   432,     0,     0,     0,    21,
+      58,   278,    49,    84,   372,   237,   468,    98,   270,   271,
+      86,    99,   388,    90,   288,   102,    77,   105,    59,    67,
+     387,    69,   280,   450,    71,    74,   269,   269,   269,   109,
+      56,    68,   390,   269,   113,    70,    72,   389,   532,    73,
+     105,   105,   461,    78,    79,   464,    80,   466,   754,   459,
+     471,   401,   703,   396,   397,   703,   482,   795,   543,   252,
+     590,   118,   120,   257,   798,   410,   253,   751,   504,   254,
+    -476,   757,   250,   286,   246,   247,  -300,   248,   752,   875,
+     249,   408,   769,   279,    11,   303,   475,   685,   764,   566,
+     570,   489,   772,   204,   453,   610,   876,   208,   264,   349,
+     544,   805,   305,   618,   290,    30,   811,   238,   307,  -300,
+     526,   526,   844,   701,   640,     3,   514,   527,   841,   399,
+     859,   350,   611,   498,   400,   -66,  -300,   535,   223,    96,
+     619,    97,   587,   808,   291,   845,    91,    23,   529,   773,
+     429,   641,   304,   430,   431,   432,   433,   434,   435,   292,
+      26,    27,    28,    29,   404,   110,   640,   293,   308,  -300,
+      31,   115,   388,   806,   490,   491,   492,   493,   494,   278,
+     272,   533,  -301,    96,   824,    97,   405,    96,    46,    97,
+     693,    92,  -223,   648,   563,   565,   565,   551,    46,   819,
+     280,   476,   822,   848,   278,   278,   409,   101,   545,   686,
+     820,   116,   798,   765,   590,    37,   121,   694,   665,    46,
+      39,   273,   402,   562,   272,   280,   280,   872,   272,    13,
+      96,   436,    97,    13,   661,    96,   371,    97,   666,   854,
+     239,   269,   477,   546,    58,    58,   100,    84,    84,   105,
+     375,   376,   105,   105,    86,    86,   851,    90,    90,   106,
+     428,   279,    59,    59,   849,   273,    13,   856,   108,   273,
+     526,   272,   587,   118,   120,   673,   877,   879,   608,   609,
+     274,   111,   723,   437,   388,   700,   279,   279,   704,   399,
+     388,   705,   670,   670,   758,   112,   870,   680,   387,   880,
+      20,   103,   667,    97,   675,   565,   588,   589,   590,   674,
+     390,   275,   273,   399,   117,   389,    97,   438,   813,   515,
+     423,   279,   278,   258,   274,   423,    25,   524,   274,   410,
+      46,   439,   460,   425,   567,   483,   426,   469,   114,   488,
+     747,   496,   497,   280,    46,    46,   503,   272,   669,   672,
+     486,   276,    13,   262,   749,   275,   235,   440,   552,   275,
+     441,   442,   536,   -61,   718,   444,   445,   277,    46,   762,
+     258,   274,  -224,  -292,   537,    34,   761,  -292,   446,   790,
+     279,   255,   119,   516,    97,   256,   259,    97,   273,   260,
+     374,    40,    97,   261,   377,   631,    97,   523,   378,   276,
+      97,   586,   275,   263,   279,   532,   399,     4,   469,    97,
+     590,   632,   605,   606,   607,   277,    16,   759,   531,   279,
+     -62,  -300,   608,   609,   556,   771,   -64,  -300,   776,   568,
+      46,   265,   886,   267,   781,   499,   500,   -63,   289,   -65,
+     388,   297,   631,   278,   298,   300,   301,   274,   302,   306,
+     309,   379,   310,   399,   311,   312,   313,   314,   632,   532,
+     778,   315,   388,   -67,   280,   777,   588,   589,   590,   316,
+     387,   593,   594,   532,   317,   318,   319,   320,   275,   279,
+     630,   321,   390,   322,   323,   324,   325,   389,   326,   327,
+     -68,   328,   329,   718,   802,   330,   331,   332,   718,   333,
+     272,   814,   532,   334,   603,   604,   605,   606,   607,   -69,
+     335,   336,   719,   337,   338,   339,   608,   609,   716,   340,
+     341,   342,   827,   724,   343,   279,   344,   345,   388,   399,
+     681,   586,   679,    84,   717,   346,    58,   834,    49,    84,
+      86,   273,   269,    90,   347,   348,    86,    46,    59,    90,
+     386,   380,    77,   826,    59,    67,   831,    69,   381,   755,
+      71,    74,   382,   384,  -328,   394,    56,    68,   398,   403,
+     406,    70,    72,   407,   706,    73,   708,   416,   417,    78,
+      79,   867,    80,   709,   707,   718,   860,   418,   429,   420,
+     424,   430,   431,   432,   433,   434,   435,   451,   456,   457,
+     274,   388,   462,   463,   465,   881,   603,   604,   605,   606,
+     607,   479,   481,   680,   502,   505,   507,   506,   608,   609,
+     874,   863,   388,   511,   767,   508,   862,   509,   510,   512,
+     387,   275,  -300,   513,   520,   278,   519,   525,   550,   279,
+     469,   719,   390,   279,   809,   892,   719,   389,   534,   553,
+     554,   555,   559,   571,   572,   573,   280,   565,   804,   815,
+     565,   423,   601,   602,   603,   604,   605,   606,   607,   436,
+     574,   716,   575,   576,   469,   612,   608,   609,   269,   613,
+     614,   615,   399,   646,   616,   617,   663,   717,   650,   620,
+     621,   622,   252,   623,   624,   785,   625,   278,    84,   253,
+     469,   626,   254,   627,   629,   639,   642,   246,   676,   454,
+     556,   643,   454,   644,   645,   279,   647,   279,   280,   279,
+     467,   437,   649,   474,   652,   469,   653,   654,   655,   656,
+     474,   657,   487,   719,   658,   659,   660,   684,   429,   688,
+     691,   430,   431,   432,   433,   434,   435,   692,   695,   698,
+     701,   710,   711,   712,   727,   438,   745,   750,   748,   766,
+     763,   279,   770,   780,   279,   239,   469,   782,   783,   439,
+      92,   788,   837,   793,   797,    58,   801,   556,    84,   279,
+     840,   832,   833,   812,   818,    86,   821,   823,    90,   835,
+     454,   538,   836,    59,   839,   440,   252,   846,   441,   442,
+     443,   825,   830,   444,   445,   842,   847,   850,   852,   857,
+     858,   865,   689,   873,   866,   882,   446,   885,   279,   436,
+     871,   469,   838,   528,   883,   891,   484,   561,   713,   279,
+     699,   760,   577,   578,   579,   580,   581,   582,   584,   884,
+     796,   890,   787,   861,   682,   829,   681,   518,   679,    84,
+     714,   480,   385,   279,   296,   792,    86,   868,   279,    90,
+     794,   791,     0,     0,    59,     0,     0,   549,     0,     0,
+       0,   437,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   469,     0,     0,   588,   589,   590,   591,   592,   593,
+     594,   595,   596,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   438,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   439,
+       0,     0,     0,     0,     0,     0,     0,     0,   580,     0,
+       0,     0,     0,     0,     0,     0,   429,     0,   583,   430,
+     431,   432,   433,   434,   435,   440,     0,     0,   441,   442,
+     443,     0,     0,   444,   445,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   446,     0,     0,     0,
+       9,     0,    10,     0,     0,     0,     0,     0,    11,     0,
+     725,   726,    13,   728,   729,   730,   731,   732,   733,   734,
+     735,   736,   737,   738,   739,   740,   741,   742,   743,   744,
+       0,   746,     0,     0,    17,     0,     0,   454,     0,     0,
+     240,    19,     0,     0,     0,     0,    20,   436,     0,     0,
+       0,    21,     0,     0,    22,     0,     0,     0,     0,     0,
+       0,    23,   474,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    25,     0,    26,    27,    28,    29,     0,     0,
+       0,     0,     0,     0,    31,     0,     0,     0,   588,   589,
+     590,   591,   592,   593,   594,     0,     0,     0,     0,   437,
+       0,     0,     0,     0,     0,   597,     0,   598,   599,   600,
+     601,   602,   603,   604,   605,   606,   607,     0,     0,     0,
+       0,    34,     0,     0,   608,   609,     0,     0,    36,    37,
+      38,   628,     0,   438,    39,     0,     0,    40,     0,     0,
+       0,   243,     0,     0,     0,     0,     0,   439,     0,     0,
+     244,     0,    43,     0,     0,     0,     0,     4,     5,     6,
+      44,    45,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   440,     0,     0,   441,   442,   443,     0,
+       0,   444,   445,     0,     0,     8,     0,     0,     0,     0,
+       0,     9,     0,    10,   446,     0,     0,     0,     0,    11,
+      12,     0,     0,    13,     0,     0,     0,     0,     0,     0,
+      14,     0,   352,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    16,     0,     0,    17,     0,     0,     0,     0,
+       0,    18,    19,     0,   853,     0,     0,    20,   855,     0,
+       0,     0,    21,     0,     0,    22,     0,     0,     0,     0,
+       0,     0,    23,     0,     0,     0,     0,     0,     0,    24,
+     353,     0,     0,    25,   454,    26,    27,    28,    29,    30,
+       0,     0,     0,     0,     0,    31,     0,     0,     0,     0,
+       0,     0,    32,   600,   601,   602,   603,   604,   605,   606,
+     607,     0,     0,     0,     0,     0,     0,     0,   608,   609,
+      33,     0,     4,     5,     6,     0,     0,     0,     0,     0,
+       0,     0,    34,     0,     0,     0,     0,     0,    35,    36,
+      37,    38,     0,     0,     0,    39,     0,     0,    40,     0,
+       8,     0,    41,     0,     0,     0,     9,     0,    10,     0,
+       0,    42,     0,    43,    11,    12,     0,     0,    13,     0,
+       0,    44,    45,     0,     0,    14,     0,   352,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    16,     0,     0,
+      17,     0,     0,     4,     5,     6,    18,    19,     0,     0,
+      46,     0,    20,     0,   370,     0,     0,    21,     0,     0,
+      22,     0,     0,     0,     0,     0,     0,    23,     0,     0,
+       0,     8,     0,     0,    24,   353,     0,     9,    25,    10,
+      26,    27,    28,    29,    30,    11,    12,     0,     0,    13,
+      31,     0,     0,     0,     0,     0,    14,    32,    15,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    16,     0,
+       0,    17,     0,     0,     0,    33,     0,    18,    19,     0,
+       0,     0,     0,    20,     0,     0,     0,    34,    21,     0,
+       0,    22,     0,    35,    36,    37,    38,     0,    23,     0,
+      39,     0,     0,    40,     0,    24,     0,    41,     0,    25,
+       0,    26,    27,    28,    29,    30,    42,     0,    43,     0,
+       0,    31,     0,     0,     0,     0,    44,    45,    32,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     4,
+       5,     6,     0,     0,     0,     0,    33,     0,   588,   589,
+     590,   591,   592,   593,   594,    46,     0,     0,    34,   828,
+       0,     0,     0,     0,    35,    36,    37,    38,     0,     0,
+       0,    39,     0,     9,    40,    10,     0,     0,    41,     0,
+       0,    11,     0,     0,     0,    13,     0,    42,     0,    43,
+       0,     0,    14,     0,     0,     0,     0,    44,    45,     0,
+       0,     0,     0,     0,     0,     0,     0,    17,     0,     0,
+       4,     5,     6,    18,    19,     0,     0,     0,     0,    20,
+       0,     0,     0,     0,    21,     0,    46,    22,     0,     0,
+     683,     0,     0,     0,    23,     0,     0,     0,     0,     0,
+       0,    24,     0,     0,     9,    25,    10,    26,    27,    28,
+      29,     0,    11,     0,     0,     0,    13,    31,     0,     0,
+       0,     0,     0,    14,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    17,     0,
+       0,     0,    33,     0,    18,    19,     0,     0,     0,     0,
+      20,     0,     0,     0,    34,    21,     0,     0,    22,     0,
+       0,    36,    37,    38,     0,    23,     0,    39,     0,     0,
+      40,     0,    24,     0,    41,     0,    25,     0,    26,    27,
+      28,    29,     0,    42,     0,    43,     0,     0,    31,     0,
+       0,     0,     0,    44,    45,     0,     0,     0,     0,     0,
+       0,     4,     0,     6,   601,   602,   603,   604,   605,   606,
+     607,     0,     0,    33,     0,     0,     0,     0,   608,   609,
+       0,     0,    46,     0,     0,    34,   678,     0,     0,     0,
+       0,     0,    36,    37,    38,     9,     0,    10,    39,     0,
+       0,    40,     0,    11,     0,    41,     0,    13,     0,     0,
+       0,     0,     0,     0,    42,     0,    43,     0,     0,     0,
+       0,     0,     0,     0,    44,    45,     0,     0,     0,    17,
+       0,     0,     0,     0,     0,   240,    19,     0,     0,     0,
+       0,    20,     0,     0,     0,     0,    21,     0,     0,    22,
+       0,     0,     0,    46,     0,     0,    23,   864,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    25,     0,    26,
+      27,    28,    29,     0,     0,     0,     0,     0,     0,    31,
+       0,    -3,     0,     0,     4,     5,     6,     0,     0,     0,
+       0,     0,     0,     0,     0,     7,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     8,     0,     0,     0,    34,     0,     9,     0,
+      10,     0,     0,    36,    37,    38,    11,    12,     0,    39,
+      13,     0,    40,     0,     0,     0,   243,    14,     0,    15,
+       0,     0,     0,     0,     0,   244,     0,    43,     0,    16,
+       0,     0,    17,     0,     0,    44,    45,     0,    18,    19,
+       0,     0,     0,     0,    20,     0,     0,     0,     0,    21,
        0,     0,    22,     0,     0,     0,     0,     0,     0,    23,
-       0,     0,     0,     0,     0,     0,     0,     0,   432,   434,
-      25,     0,    26,    27,    28,    29,     0,     0,     0,     0,
-       0,     0,    31,   435,   592,     0,   593,   594,   595,   596,
-     597,   598,   599,   600,   601,   602,     0,   433,     0,     0,
-       0,     0,     0,   603,   604,     0,     0,     0,     0,   436,
-     623,     0,   437,   438,   439,     0,     0,   440,   441,    34,
-     433,     0,     0,     0,     0,     0,    36,    37,    38,     0,
-     442,   434,    39,     0,     0,    40,     0,     0,     0,   241,
-       0,     0,     0,     0,     0,   435,     0,     0,   242,     0,
-      43,     0,     0,     0,   434,     0,   841,     0,    44,    45,
-     843,     0,     0,     0,     0,     0,     0,     0,   435,     0,
-       0,   436,     0,     0,   437,   438,   439,     0,     0,   440,
-     441,     0,     0,     0,   450,     4,     5,     6,     0,     0,
-       0,     0,   442,     0,   436,     0,     0,   437,   438,   439,
-       0,     0,   440,   441,     0,     0,     0,     0,     0,     0,
-       0,   681,     0,     8,     0,   442,     0,     0,     0,     9,
-       0,    10,     0,     0,     0,     0,     0,    11,    12,     0,
-       0,    13,     0,     0,     0,     0,     0,     0,    14,     0,
-     350,     0,     0,     0,     0,     0,     0,     0,     0,    16,
-       0,     0,    17,     0,     0,     0,     0,     0,    18,    19,
-     583,   584,   585,     0,    20,   588,   589,     0,     0,    21,
-       0,     0,    22,     0,     0,     0,     0,     0,     0,    23,
-       0,     0,     4,     0,    96,     0,    24,   351,     0,     0,
+       0,     0,     0,     0,    46,     0,    24,     0,   784,     0,
       25,     0,    26,    27,    28,    29,    30,     0,     0,     0,
        0,     0,    31,     0,     0,     0,     0,     0,     0,    32,
-       0,     0,     0,     0,     0,     0,     9,     0,    10,     0,
-       0,     0,     0,     0,    11,     0,     0,    33,     0,     4,
-       5,     6,     0,     0,     0,     0,     0,     0,     0,    34,
-       0,     0,     0,     0,     0,    35,    36,    37,    38,    17,
-       0,     0,    39,     0,     0,    40,    19,     8,     0,    41,
-       0,     0,     0,     9,     0,    10,    21,     0,    42,    22,
-      43,    11,    12,     0,     0,    13,    23,     0,    44,    45,
-       0,     0,    14,     0,   350,     0,     0,     0,     0,    26,
-      27,    28,    29,    16,     0,     0,    17,     0,     0,    31,
-       0,     0,    18,    19,     0,     0,     0,    46,    20,     0,
-       0,   367,     0,    21,     0,     0,    22,     0,     0,     0,
-       0,     0,     0,    23,     0,     0,     0,     0,     0,     0,
-      24,   351,     0,     0,    25,     0,    26,    27,    28,    29,
-      30,     0,     0,     0,    37,    38,    31,     0,     0,    39,
-       0,     0,     0,    32,     0,   596,   597,   598,   599,   600,
-     601,   602,     0,     0,     0,     0,     0,    43,     0,   603,
-     604,    33,     0,     4,     5,     6,    45,     0,     0,     0,
-       0,     0,     0,    34,     0,     0,     0,     0,     0,    35,
-      36,    37,    38,     0,     0,     0,    39,     0,     0,    40,
-       0,     8,     0,    41,     0,     0,     0,     9,     0,    10,
-       0,     0,    42,     0,    43,    11,    12,     0,     0,    13,
-       0,     0,    44,    45,     0,     0,    14,     0,    15,     0,
-       0,     0,     0,     0,     0,     0,     0,    16,     0,     0,
-      17,     0,     0,     0,     0,     0,    18,    19,     0,     0,
-       0,    46,    20,     0,     0,   818,     0,    21,     0,     0,
-      22,     0,     0,     0,     0,     0,     0,    23,     0,     0,
-       0,     0,     0,     0,    24,     4,     5,     6,    25,     0,
-      26,    27,    28,    29,    30,     0,     0,     0,     0,     0,
-      31,     0,     0,     0,     0,     0,     0,    32,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     9,
-       0,    10,     0,     0,     0,    33,     0,    11,     0,     0,
-       0,    13,     0,     0,     0,     0,     0,    34,    14,     0,
-       0,     0,     0,    35,    36,    37,    38,     0,     0,     0,
-      39,     0,    17,    40,     0,     0,     0,    41,    18,    19,
-       0,     0,     0,     0,    20,     0,    42,     0,    43,    21,
-       0,     0,    22,     0,     0,     0,    44,    45,     0,    23,
-       0,     0,     0,     0,     0,     0,    24,     4,     5,     6,
-      25,     0,    26,    27,    28,    29,     0,     0,     0,     0,
-       0,     0,    31,     0,     0,    46,     0,     0,     0,   675,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     9,     0,    10,     0,     0,     0,    33,     0,    11,
-       0,     0,     0,    13,     0,     0,     0,     0,     0,    34,
-      14,     0,     0,     0,     0,     0,    36,    37,    38,     0,
-       0,     0,    39,     0,    17,    40,     0,     0,     0,    41,
-      18,    19,     0,     0,     0,     0,    20,     0,    42,     0,
-      43,    21,     0,     0,    22,     0,     0,     0,    44,    45,
-       0,    23,     0,     0,     0,     0,     0,     0,    24,     4,
-       0,     6,    25,     0,    26,    27,    28,    29,     0,     0,
-       0,     0,     0,     0,    31,     0,     0,    46,     0,     0,
-       0,   671,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     9,     0,    10,     0,     0,     0,    33,
-       0,    11,     0,     0,     0,    13,     0,     0,     0,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,    36,    37,
-      38,     0,     0,     0,    39,     0,    17,    40,     0,     0,
-       0,    41,   238,    19,     0,     0,     0,     0,    20,     0,
-      42,     0,    43,    21,     0,     0,    22,     0,     0,     0,
-      44,    45,     0,    23,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    25,     0,    26,    27,    28,    29,
-       0,     0,     0,     0,     0,     0,    31,     0,     0,    46,
-       0,     0,     0,   850,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    33,     0,     0,
+       4,     5,     6,     0,     0,     0,     0,     0,     0,    34,
+     351,     0,     0,     0,     0,    35,    36,    37,    38,     0,
+       0,     0,    39,     0,     0,    40,     0,     0,     8,    41,
+       0,     0,     0,     0,     9,     0,    10,     0,    42,     0,
+      43,     0,    11,    12,     0,     0,    13,     0,    44,    45,
+       0,     0,     0,    14,     0,   352,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    16,     0,     0,    17,     0,
+       0,     0,     0,     0,    18,    19,     0,    46,     0,     0,
+      20,     0,     0,     0,     0,    21,     0,     0,    22,     0,
+       0,     0,     4,     0,     6,    23,     0,     0,     0,     0,
+       0,     0,    24,   353,     0,     0,    25,     0,    26,    27,
+      28,    29,    30,     0,     0,     0,     0,     0,    31,     0,
+       0,     0,     0,     0,     0,    32,     9,     0,    10,     0,
+       0,     0,     0,   272,    11,     0,     0,     0,    13,     0,
+       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
+      17,    35,    36,    37,    38,     0,   240,    19,    39,     0,
+       0,    40,    20,     0,   273,    41,     0,    21,     0,     0,
+      22,     0,     0,     0,    42,     0,    43,    23,     0,     0,
+       0,     0,     0,     0,    44,    45,     0,     0,    25,     0,
+      26,    27,    28,    29,     0,     0,     0,     0,     0,     0,
+      31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    46,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   274,     0,     0,     0,     0,     4,     0,
+       6,     0,     0,     0,     0,     0,     0,    34,     0,     0,
+       0,     0,     0,     0,    36,    37,    38,     0,     0,     0,
+      39,     0,     0,    40,   275,     0,     0,   243,     0,     0,
+       0,     0,     9,     0,    10,     0,   244,     0,    43,   272,
+      11,     0,     0,     0,    13,     0,    44,    45,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     4,     5,     6,     0,     0,     0,     0,
-       0,     0,     0,    34,     7,     0,     0,     0,     0,     0,
-      36,    37,    38,     0,     0,     0,    39,     0,     0,    40,
-       0,     8,     0,   241,     0,     0,     0,     9,     0,    10,
-       0,     0,   242,     0,    43,    11,    12,     0,     0,    13,
-       0,     0,    44,    45,     0,     0,    14,     0,    15,     0,
-       0,     0,     0,     0,     0,     0,     0,    16,     0,     0,
-      17,     0,     0,     0,     0,     0,    18,    19,     0,     0,
-       0,    46,    20,     0,     0,   774,     0,    21,     0,     0,
-      22,     0,     0,     0,     0,     0,     0,    23,     0,     0,
-       0,     0,     0,     0,    24,     0,     0,     0,    25,     0,
-      26,    27,    28,    29,    30,     0,     0,     0,     0,     0,
-      31,     0,     0,     0,     0,     0,     0,    32,     0,     0,
+       0,     0,     0,     0,   753,     0,    17,     0,     0,     4,
+       0,     6,   240,    19,     0,    46,     0,     0,    20,     0,
+     273,     0,     0,    21,     0,     0,    22,     0,     0,     0,
+     789,     0,     0,    23,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     9,    25,    10,    26,    27,    28,    29,
+       0,    11,     0,     0,     0,    13,    31,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   588,   589,   590,   591,
+     592,   593,   594,   595,   596,     0,     0,    17,     0,   274,
+       0,     0,     0,   240,    19,     0,     0,     0,     0,    20,
+       0,     0,     0,    34,    21,     0,     0,    22,     0,     0,
+      36,    37,    38,     0,    23,     0,    39,     0,     0,    40,
+     275,     0,     0,   243,     0,    25,     0,    26,    27,    28,
+      29,     0,   244,     0,    43,     0,     0,    31,     0,     0,
+       0,     0,    44,    45,     0,     0,     0,     0,     0,     0,
+       4,     0,     6,     0,     0,     0,     0,     0,     0,     0,
+     807,   588,   589,   590,   591,   592,   593,   594,   595,   596,
+       0,    46,     0,     0,    34,     0,     0,     0,     0,     0,
+       0,    36,    37,    38,     9,     0,    10,    39,     0,     0,
+      40,     0,    11,     0,   243,     0,    13,     0,     0,     0,
+       0,     0,     0,   244,     0,    43,     0,     0,     0,     0,
+       0,     0,     0,    44,    45,     0,     0,     0,    17,     0,
+       0,     0,     0,     0,   240,    19,     0,     0,     0,     0,
+      20,     0,     0,     0,     0,    21,     0,     0,    22,     0,
+       0,     0,    46,     0,     0,    23,   588,   589,   590,   591,
+     592,   593,   594,   595,   596,     0,    25,     0,    26,    27,
+      28,    29,     0,     0,     0,     0,     0,   597,    31,   598,
+     599,   600,   601,   602,   603,   604,   605,   606,   607,     0,
+       0,     0,     0,     0,     0,     0,   608,   609,     0,     0,
+       0,     0,     0,   651,   588,   589,   590,   591,   592,   593,
+     594,   595,   596,     0,     0,    34,     0,     0,     0,     0,
+       0,     0,    36,    37,    38,     0,     0,     0,    39,     0,
+       0,    40,     0,     0,     0,   243,     0,   588,   589,   590,
+     591,   592,   593,   594,   244,   596,    43,     0,     0,     0,
+       0,     0,     0,     0,    44,    45,     0,     0,     0,     0,
+       0,     0,   597,     0,   598,   599,   600,   601,   602,   603,
+     604,   605,   606,   607,     0,     0,     0,     0,     0,     0,
+       0,   608,   609,    46,     0,     0,     0,     0,   715,   588,
+     589,   590,   591,   592,   593,   594,   595,   596,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    34,     0,     4,
-       5,     6,     0,    35,    36,    37,    38,     0,     0,   349,
-      39,     0,     0,    40,     0,     0,     0,    41,     0,     0,
-       0,     0,     0,     0,   -86,     0,    42,     8,    43,     0,
-       0,     0,     0,     9,     0,    10,    44,    45,     0,     0,
-       0,    11,    12,     0,     0,    13,     0,     0,     0,     0,
-       0,     0,    14,     0,   350,     0,   583,   584,   585,   586,
-     587,   588,   589,    16,     0,    46,    17,     0,     0,     0,
-       0,     0,    18,    19,     0,     0,     0,     0,    20,     0,
-       0,     0,     0,    21,     0,     0,    22,     0,     0,     0,
-       0,     0,     0,    23,     0,     0,     0,     0,     0,     0,
-      24,   351,     0,     0,    25,     0,    26,    27,    28,    29,
-      30,     0,     0,     0,     0,     0,    31,     0,     0,     0,
-       0,     0,     4,    32,     6,     0,     0,     0,     0,     0,
+     588,   589,   590,   591,   592,   593,   594,   595,   596,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   588,
+     589,   590,   591,   592,   593,   594,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   597,     0,   598,
+     599,   600,   601,   602,   603,   604,   605,   606,   607,   588,
+     589,   590,   591,   592,   593,   594,   608,   609,   690,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    33,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    34,     0,     0,     9,     0,    10,    35,
-      36,    37,    38,   270,    11,     0,    39,     0,    13,    40,
-       0,     0,     0,    41,     0,     0,     0,     0,     0,     0,
-       0,     0,    42,     0,    43,     0,     0,     0,     0,    17,
-       0,     0,    44,    45,     0,   238,    19,     0,     0,     0,
-       0,    20,     0,   271,     0,     0,    21,     0,     0,    22,
-       0,     0,     0,     0,     0,     0,    23,     0,     0,     0,
-       0,    46,     0,     0,     0,     0,     0,    25,     0,    26,
-      27,    28,    29,     0,     0,     0,     0,     0,     0,    31,
-       0,     0,     0,     0,     0,     4,     0,     6,   593,   594,
-     595,   596,   597,   598,   599,   600,   601,   602,     0,     0,
-       0,     0,   272,     0,     0,   603,   604,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    34,     0,     0,     9,
-       0,    10,     0,    36,    37,    38,   270,    11,     0,    39,
-       0,    13,    40,   273,     0,     0,   241,     0,     0,     0,
-       0,     0,     0,     0,     0,   242,     0,    43,     0,     0,
-       0,     0,    17,     0,     0,    44,    45,     0,   238,    19,
-       0,     0,     0,     0,    20,     0,   271,     0,     0,    21,
-       0,     0,    22,   745,     0,     0,     0,     0,     0,    23,
-       0,     0,     0,     0,    46,     0,     0,     0,     0,     0,
-      25,     0,    26,    27,    28,    29,     0,     0,     0,     0,
-       0,     0,    31,     0,     0,     0,     0,     4,     0,     6,
-       0,     0,   583,   584,   585,   586,   587,   588,   589,   590,
-     591,     0,     0,     0,     0,   272,     0,     0,   779,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
-       0,     9,     0,    10,     0,     0,    36,    37,    38,    11,
-       0,     0,    39,    13,     0,    40,   273,     0,     0,   241,
-       0,     0,     0,     0,     0,     0,     0,     0,   242,     0,
-      43,     0,     0,     0,    17,     0,     0,     0,    44,    45,
-     238,    19,     0,     0,     0,     0,    20,     0,     0,     0,
-       0,    21,     0,     0,    22,     0,   797,     0,     0,     0,
-       0,    23,     0,     0,     0,     0,     0,    46,     0,     4,
-       0,     6,    25,     0,    26,    27,    28,    29,     0,     0,
-       0,     0,     0,     0,    31,   583,   584,   585,   586,   587,
-     588,   589,   590,   591,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     9,     0,    10,     0,     0,     0,     0,
-       0,    11,     0,     0,     0,    13,     0,     0,     0,     0,
-       0,    34,     0,     0,     0,     0,     0,     0,    36,    37,
-      38,     0,     0,     0,    39,     0,    17,    40,     0,     0,
-       0,   241,   238,    19,     0,     0,     0,     0,    20,     0,
-     242,     0,    43,    21,     0,     0,    22,     0,     0,     0,
-      44,    45,   592,    23,   593,   594,   595,   596,   597,   598,
-     599,   600,   601,   602,    25,     0,    26,    27,    28,    29,
-       0,   603,   604,     0,     0,     0,    31,     0,   646,    46,
-     583,   584,   585,   586,   587,   588,   589,   590,   591,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   583,   584,   585,   586,   587,   588,   589,   590,
-     591,     0,     0,    34,     0,     0,     0,     0,     0,     0,
-      36,    37,    38,     0,     0,     0,    39,     0,     0,    40,
-       0,     0,     0,   241,     0,     0,     0,     0,     0,     0,
-       0,     0,   242,     0,    43,     0,     0,     0,     0,     0,
-       0,     0,    44,    45,   583,   584,   585,   586,   587,   588,
-     589,   590,   591,     0,     0,   592,     0,   593,   594,   595,
-     596,   597,   598,   599,   600,   601,   602,     0,     0,     0,
-       0,    46,     0,     0,   603,   604,     0,     0,     0,     0,
-       0,   707,   583,   584,   585,   586,   587,   588,   589,   590,
-     591,     0,     0,     0,     0,     0,     0,     0,     0,   583,
-     584,   585,   586,   587,   588,   589,   583,   584,   585,   586,
-     587,   588,   589,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   597,     0,   598,   599,   600,
+     601,   602,   603,   604,   605,   606,   607,     0,     0,     0,
+       0,     0,     0,     0,   608,   609,   817,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     598,   599,   600,   601,   602,   603,   604,   605,   606,   607,
+       0,     0,     0,     0,     0,     0,     0,   608,   609,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     597,   816,   598,   599,   600,   601,   602,   603,   604,   605,
+     606,   607,     0,     0,     0,     0,     0,     0,     0,   608,
+     609,   597,     0,   598,   599,   600,   601,   602,   603,   604,
+     605,   606,   607,     0,     0,     0,     0,     0,     0,     0,
+     608,   609,   598,   599,   600,   601,   602,   603,   604,   605,
+     606,   607,     0,     0,     0,     0,     0,     0,     0,   608,
+     609,     0,     0,     4,     0,     6,     0,     0,     0,     0,
+       0,     0,     0,   599,   600,   601,   602,   603,   604,   605,
+     606,   607,     0,     0,     0,     0,     0,     0,     0,   608,
+     609,     8,     0,     0,     0,     0,     0,     9,     0,    10,
+       0,     0,     0,     0,     0,    11,    12,     0,     0,    13,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     592,     0,   593,   594,   595,   596,   597,   598,   599,   600,
-     601,   602,     0,     0,     0,     0,     0,     0,     0,   603,
-     604,   682,   592,     0,   593,   594,   595,   596,   597,   598,
-     599,   600,   601,   602,     0,     0,     0,     0,     0,     0,
-       0,   603,   604,   807,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   592,   806,   593,   594,   595,   596,
-     597,   598,   599,   600,   601,   602,     0,     0,     0,     0,
-       0,     0,     0,   603,   604,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   592,     0,   593,   594,   595,   596,   597,   598,
-     599,   600,   601,   602,     4,     0,     6,     0,     0,     0,
-       0,   603,   604,   595,   596,   597,   598,   599,   600,   601,
-     602,   596,   597,   598,   599,   600,   601,   602,   603,   604,
-       0,     0,     8,     0,     0,   603,   604,     0,     9,     0,
-      10,     0,     0,     0,     0,     0,    11,    12,     0,     0,
-      13,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  -347,     0,
-       0,    17,     0,     0,     0,     0,     0,   238,    19,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,  -349,     0,
+       0,    17,     0,     0,     4,     0,     6,   240,    19,     0,
        0,     0,     0,    20,     0,     0,     0,     0,    21,     0,
        0,    22,     0,     0,     0,     0,     0,     0,    23,     0,
-       0,     0,     0,     0,     0,     0,     4,     0,     6,    25,
-       0,    26,    27,    28,    29,    30,     0,     0,   239,     0,
-       0,    31,     0,     0,     0,     0,   240,     0,     0,     0,
-       0,     0,     0,     0,     4,     0,     6,     0,     0,     0,
-       9,     0,    10,     0,     0,     0,     0,     0,    11,     0,
-       0,     0,    13,     0,     0,     0,     0,     0,    34,     0,
-       0,     0,     0,     0,    35,    36,    37,    38,     9,     0,
-      10,    39,     0,    17,    40,     0,    11,     0,   241,   238,
-      19,     0,     0,     0,     0,    20,     0,   242,     0,    43,
-      21,     0,     0,    22,     0,     0,     0,    44,    45,     0,
-      23,    17,     0,     0,     0,     0,     0,   238,    19,     0,
-       0,    25,     0,    26,    27,    28,    29,     0,    21,     0,
-       0,    22,     0,    31,     0,     0,     0,     0,    23,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   578,     0,
-       0,    26,    27,    28,    29,     0,     0,     0,     0,     0,
-       0,    31,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,     0,     0,     0,     0,     0,    36,    37,    38,
-       9,     0,    10,    39,     0,     0,    40,     0,    11,     0,
-     241,     0,    13,     0,     0,     0,     0,     0,     0,   242,
-       0,    43,     0,     0,     0,    36,    37,    38,     0,    44,
-      45,    39,     0,    17,     0,     0,     0,     0,   241,   238,
-      19,     0,     0,     0,     0,    20,     0,   242,     0,    43,
-      21,     0,     0,    22,     0,     0,     0,    44,    45,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     9,    25,
+      10,    26,    27,    28,    29,    30,    11,     0,   241,     0,
+      13,    31,     0,     0,     0,     0,   242,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    17,     0,     0,     0,     0,     0,   240,    19,
+       0,     0,     0,     0,    20,     0,     0,     0,    34,    21,
+       0,     0,    22,     0,    35,    36,    37,    38,     0,    23,
+       0,    39,     0,     0,    40,     0,     0,     0,   243,     4,
+      25,     6,    26,    27,    28,    29,     0,   244,     0,    43,
+       0,     0,    31,     0,     0,     0,     0,    44,    45,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     9,     0,    10,     0,     0,     0,     0,
+       0,    11,     0,     0,     0,     0,     0,     0,     0,    34,
+       0,     0,     0,     0,     0,     0,    36,    37,    38,     0,
+       0,     4,    39,    97,     0,    40,     0,    17,     0,   243,
+       0,     0,     0,   240,    19,     0,     0,     0,   244,     0,
+      43,     0,   583,     0,    21,     0,     0,    22,    44,    45,
+       0,     0,     0,     0,    23,     9,     0,    10,     0,     0,
+       0,     0,     0,    11,     0,     0,     0,    26,    27,    28,
+      29,     0,     0,     0,     9,     0,    10,    31,     0,     0,
+       0,     0,    11,     0,     0,     0,    13,     0,     0,    17,
+       0,     0,     0,     0,     0,     0,    19,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    21,     0,    17,    22,
+       0,     0,     0,     0,   240,    19,    23,     0,     0,     0,
+      20,    36,    37,    38,     0,    21,     0,    39,    22,    26,
+      27,    28,    29,     0,   243,    23,     0,     0,     0,    31,
+       0,     0,     0,   244,     0,    43,    25,   583,    26,    27,
+      28,    29,     0,    44,    45,     0,     0,     0,    31,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     9,
+       0,    10,     0,     0,    37,    38,     0,    11,     0,    39,
+       0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
+       0,     0,    36,    37,    38,     0,     0,    43,    39,     0,
+       0,    40,     0,    17,     0,   243,    45,     0,     0,   240,
+      19,     0,     0,     0,   244,     0,    43,     0,     0,     0,
+      21,     0,     0,    22,    44,    45,     0,     0,     0,     0,
       23,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     578,    25,     0,    26,    27,    28,    29,     0,     0,     0,
+       0,     0,     0,    26,    27,    28,    29,     0,     0,     0,
        0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     9,     0,    10,     0,     0,     0,     0,     0,
-      11,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,     0,     0,     0,     0,     0,    36,    37,    38,
-       0,     0,     0,    39,     0,    17,    40,     0,     0,     0,
-     241,   238,    19,     0,     0,     0,     0,     0,     0,   242,
-       0,    43,    21,     0,     0,    22,     0,     0,     0,    44,
-      45,     0,    23,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    26,    27,    28,    29,     0,
-       0,     0,     0,     0,     0,    31,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
-      37,    38,     0,     0,     0,    39,     0,     0,     0,     0,
-       0,     0,   241,     0,     0,     0,     0,   121,   122,     0,
-       0,   242,   123,    43,   124,   125,   126,   127,   128,     0,
-     129,    44,    45,   130,     0,   131,     0,     0,     0,   132,
-     133,     0,   134,   135,   136,   137,   138,   139,     0,   140,
-       0,   141,   142,   143,   144,   145,   146,   147,   148,     0,
-     149,     0,     0,   150,   151,   152,   153,   154,     0,     0,
-     155,   156,   157,   158,     0,     0,     0,   159,   160,     0,
-     161,   162,     0,   163,   164,   165,   166,   167,   168,     0,
-     169,   170,   171,   172,   173,   174,     0,     0,   175,     0,
-       0,   176,     0,     0,     0,     0,     0,   177,   178,     0,
-     179,   180,     0,   181,   182,   183,     0,     0,     0,     0,
-     184,   185,   186,     0,   187,   188,   189,     0,   190,   191,
-     192,   193,   194,   195,   196,     0,   197,     0,   198,     0,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,     0,
-     208,   209,     0,   210,   211,     0,     0,     0,     0,     0,
-     212,     0,     0,   213,     0,   214,     0,   215,   216,     0,
-       0,   217,   218,   219,   220,     0,     0,   221,     0,   222,
-       0,   223,   224,   225,   226,   227,   228,   229,     0,     0,
-     230
+       0,     0,     0,     0,     0,     0,     0,    36,    37,    38,
+       0,     0,     0,    39,     0,     0,     0,     0,     0,     0,
+     243,     0,     0,     0,     0,   122,   123,     0,     0,   244,
+     124,    43,   125,   126,   127,   128,   129,     0,   130,    44,
+      45,   131,     0,   132,     0,     0,     0,   133,   134,     0,
+     135,   136,   137,   138,   139,   140,     0,   141,     0,   142,
+     143,   144,     0,   145,   146,   147,   148,   149,     0,   150,
+       0,     0,   151,   152,   153,   154,   155,     0,     0,   156,
+     157,   158,   159,     0,     0,     0,   160,   161,     0,   162,
+     163,     0,   164,   165,   166,   167,   168,   169,     0,   170,
+     171,   172,   173,   174,   175,     0,     0,   176,     0,     0,
+     177,     0,     0,     0,     0,     0,   178,   179,     0,   180,
+     181,     0,   182,   183,   184,     0,     0,     0,     0,   185,
+     186,   187,     0,   188,   189,   190,     0,   191,   192,   193,
+     194,   195,   196,   197,     0,   198,     0,   199,     0,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,     0,   209,
+     210,     0,   211,   212,     0,     0,     0,     0,     0,   213,
+       0,     0,   214,     0,   215,     0,   216,   217,     0,     0,
+     218,   219,   220,   221,     0,     0,   222,     0,   223,     0,
+     224,   225,   226,   227,   228,   229,   230,     0,     0,   231
 };
 
 static const yytype_int16 yycheck[] =
 {
-       8,     2,     2,    55,    12,   237,     2,   256,    16,   256,
-      18,     2,    83,     2,    83,     2,    80,    81,    82,    81,
-      82,   318,    30,    87,     2,    87,   312,    35,     2,    58,
-       2,     2,     2,    41,    42,   327,     2,     2,     2,     2,
-     256,   320,   256,   347,   323,     2,   325,     2,   698,   328,
-     275,   276,   391,   280,   367,   334,    64,     6,   626,     6,
-     114,    84,    58,   690,    41,    42,   298,    58,   124,    58,
-     627,    58,    67,   126,    43,    83,     3,   625,     5,   442,
-      58,   629,    27,   114,    58,    28,    58,    17,   706,   114,
-     113,    60,   178,   711,   416,   417,     3,   394,   204,   114,
-     204,    49,   204,   204,    75,   178,   178,    29,   152,   314,
-     225,   204,   156,   204,   224,   230,   204,    44,   211,   114,
-     211,     3,    49,     5,   226,   231,    69,   231,     0,     3,
-     231,     5,   147,     3,    82,     5,   204,    59,   343,   227,
-     708,   227,   228,   187,   227,   228,   199,   200,   201,   202,
-     203,    73,   709,    60,   204,   228,   228,    84,   204,    81,
-     108,   210,    44,   231,   204,   211,   391,    49,   228,   225,
-      44,    15,    16,    17,    44,   229,   226,   745,   796,   250,
-       9,   250,   832,   415,   416,   417,   131,    17,   404,    31,
-     404,   231,    17,   750,   230,    37,   744,   501,   229,   747,
-     225,   514,    84,   525,   275,   276,   275,   276,   571,   157,
-      84,   225,   225,   110,    84,   229,   143,   230,   581,   846,
-     284,   225,   284,    38,   167,   173,   230,   172,    43,   797,
-     238,   239,   240,   241,   242,   235,   236,   227,   228,   235,
-     236,   310,   250,     3,   235,   236,   803,   174,   235,   236,
-       3,   799,   227,     6,     7,     8,     9,    10,    11,   202,
-     229,   143,   810,   230,   241,   242,   515,   275,   276,   143,
-     230,   550,   521,   143,   521,   210,     6,     7,   307,   214,
-     512,   513,   231,   312,   231,     9,   511,   214,    12,   837,
-     319,   184,   174,   525,   224,   225,   227,   210,   327,   515,
-     174,   515,   310,   230,   174,   521,   225,   521,   337,   227,
-     229,   225,   335,   610,   114,   229,   339,   549,   341,   342,
-     391,   225,   391,   346,    44,   229,   605,   327,   227,    49,
-      83,   225,   214,   228,   225,   229,    67,   406,   229,   368,
-     214,   227,   227,   225,   214,   231,   227,   227,   230,   662,
-     227,   225,   665,   580,   227,     3,   230,     5,   671,   645,
-     230,     3,   641,     5,    84,   227,   227,   396,   212,   213,
-     214,   215,   216,     3,   227,     5,   384,     3,   442,     5,
-     224,   225,   135,   391,   214,   215,   216,   212,   213,   214,
-     215,   216,   684,     9,   224,   225,   396,   228,   406,   224,
-     225,   390,     3,   411,     5,   744,   633,     3,     3,     5,
-       5,     3,     3,     5,     5,   227,   169,   417,   210,   225,
-     669,   227,   230,   143,   228,   230,     5,   230,   230,   230,
-     183,   230,   230,   230,   230,   230,   465,   230,   225,   230,
-     511,   690,   511,   690,   230,   758,   230,   230,   230,   230,
-     230,   230,   230,   669,   174,   669,   209,   796,   466,   212,
-     213,   214,   230,   230,   217,   218,   230,   230,   230,   230,
-     227,   810,   230,   226,   690,   700,   690,   230,   230,   706,
-     230,   230,   230,   230,   711,   230,   230,   714,   230,   230,
-     230,   230,   230,   230,   214,   228,   228,   210,   837,   228,
-     228,   228,   227,   511,   227,   225,   224,   571,   230,   580,
-     230,   228,   206,   232,   206,   231,   517,   517,   582,   231,
-     582,   517,   523,   523,   230,     9,   517,   523,     6,   558,
-     517,   560,   523,   830,   523,   760,   523,   850,    44,     9,
-     756,     9,   756,     9,     9,   523,     9,   763,     9,   523,
-       9,   523,   523,   523,     9,   225,   627,   523,   523,   523,
-     523,   228,   230,   227,   560,   227,   523,   558,   523,   796,
-     227,   229,   228,   227,   227,   206,   825,   228,    84,   315,
-     214,   860,   318,    15,    16,    17,    18,    19,    20,    21,
-     326,    23,   231,   329,   229,    45,   228,   846,   627,   846,
-     336,   204,   338,   232,     6,   204,   231,   659,   231,   825,
-     231,   825,   231,   230,   224,   204,   645,   625,   231,   231,
-     231,   629,   231,   231,   231,   231,   231,   627,   204,   700,
-     846,   700,   846,   702,   866,   706,   868,   143,   709,   204,
-     711,   231,     9,   231,   673,   231,   231,    97,   231,   231,
-     231,   715,   224,   715,   231,   684,   231,   231,   394,   395,
-     110,   111,   112,   113,   231,   231,   160,   231,   174,   231,
-     120,   231,   231,   231,   231,   231,   231,   673,   206,   679,
-     709,   227,   673,   231,   684,   693,   673,   204,   184,   760,
-     698,   760,   700,   204,   702,   210,   231,   227,   227,     3,
-     436,   437,   438,   439,   440,   441,   442,     3,   214,   709,
-       9,     6,     6,   231,   204,   165,   228,   206,   227,   225,
-     170,   750,   229,   225,   230,   796,   229,   227,   211,    15,
-      16,    17,    18,    19,    20,    21,   744,   204,   231,   747,
-     231,     5,   227,   231,   231,   231,   775,   227,   227,   206,
-     750,   228,   760,   206,   762,   763,   231,   231,   231,   759,
-     231,   210,   231,   759,   206,   227,   413,   227,   759,   227,
-     635,   227,   759,   770,   803,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   389,   336,   868,   693,   679,
-     567,   799,   224,   225,   549,   531,   571,   377,   832,   250,
-     521,   332,   810,   803,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,     3,   822,    93,     6,     7,     8,     9,
-      10,    11,   689,   687,   832,   826,   826,   400,   685,   837,
-     826,    -1,    -1,    -1,    -1,   826,    -1,    -1,    -1,   826,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   583,   584,    -1,
-     586,   587,   588,   589,   590,   591,   592,   593,   594,   595,
-     596,   597,   598,   599,   600,   601,   602,    -1,   604,    -1,
-      -1,    -1,    -1,    -1,   610,     3,    -1,     5,     6,     7,
-       8,     9,    10,    11,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    83,    -1,    -1,    -1,    -1,     3,   635,
-      -1,     6,     7,     8,     9,    10,    11,    -1,    -1,    37,
-      -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    -1,    -1,
-      -1,    49,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   224,   225,
-      -1,    -1,    70,    -1,    -1,   135,    -1,    -1,    76,    77,
-      -1,    -1,    -1,    -1,    82,    83,    -1,    -1,    -1,    87,
-      -1,    -1,    90,    -1,    -1,    -1,    -1,    -1,    -1,    97,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,   169,
-     108,    -1,   110,   111,   112,   113,    -1,    -1,    -1,    -1,
-      -1,    -1,   120,   183,   205,    -1,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,    -1,   135,    -1,    -1,
-      -1,    -1,    -1,   224,   225,    -1,    -1,    -1,    -1,   209,
-     231,    -1,   212,   213,   214,    -1,    -1,   217,   218,   157,
-     135,    -1,    -1,    -1,    -1,    -1,   164,   165,   166,    -1,
-     230,   169,   170,    -1,    -1,   173,    -1,    -1,    -1,   177,
-      -1,    -1,    -1,    -1,    -1,   183,    -1,    -1,   186,    -1,
-     188,    -1,    -1,    -1,   169,    -1,   802,    -1,   196,   197,
-     806,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   183,    -1,
-      -1,   209,    -1,    -1,   212,   213,   214,    -1,    -1,   217,
-     218,    -1,    -1,    -1,   830,     3,     4,     5,    -1,    -1,
-      -1,    -1,   230,    -1,   209,    -1,    -1,   212,   213,   214,
-      -1,    -1,   217,   218,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   226,    -1,    31,    -1,   230,    -1,    -1,    -1,    37,
-      -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
-      -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    56,    -1,
-      58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
-      -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    76,    77,
-      15,    16,    17,    -1,    82,    20,    21,    -1,    -1,    87,
-      -1,    -1,    90,    -1,    -1,    -1,    -1,    -1,    -1,    97,
-      -1,    -1,     3,    -1,     5,    -1,   104,   105,    -1,    -1,
-     108,    -1,   110,   111,   112,   113,   114,    -1,    -1,    -1,
-      -1,    -1,   120,    -1,    -1,    -1,    -1,    -1,    -1,   127,
-      -1,    -1,    -1,    -1,    -1,    -1,    37,    -1,    39,    -1,
-      -1,    -1,    -1,    -1,    45,    -1,    -1,   145,    -1,     3,
-       4,     5,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   157,
-      -1,    -1,    -1,    -1,    -1,   163,   164,   165,   166,    70,
-      -1,    -1,   170,    -1,    -1,   173,    77,    31,    -1,   177,
-      -1,    -1,    -1,    37,    -1,    39,    87,    -1,   186,    90,
-     188,    45,    46,    -1,    -1,    49,    97,    -1,   196,   197,
-      -1,    -1,    56,    -1,    58,    -1,    -1,    -1,    -1,   110,
-     111,   112,   113,    67,    -1,    -1,    70,    -1,    -1,   120,
-      -1,    -1,    76,    77,    -1,    -1,    -1,   225,    82,    -1,
-      -1,   229,    -1,    87,    -1,    -1,    90,    -1,    -1,    -1,
-      -1,    -1,    -1,    97,    -1,    -1,    -1,    -1,    -1,    -1,
-     104,   105,    -1,    -1,   108,    -1,   110,   111,   112,   113,
-     114,    -1,    -1,    -1,   165,   166,   120,    -1,    -1,   170,
-      -1,    -1,    -1,   127,    -1,   210,   211,   212,   213,   214,
-     215,   216,    -1,    -1,    -1,    -1,    -1,   188,    -1,   224,
-     225,   145,    -1,     3,     4,     5,   197,    -1,    -1,    -1,
-      -1,    -1,    -1,   157,    -1,    -1,    -1,    -1,    -1,   163,
-     164,   165,   166,    -1,    -1,    -1,   170,    -1,    -1,   173,
-      -1,    31,    -1,   177,    -1,    -1,    -1,    37,    -1,    39,
-      -1,    -1,   186,    -1,   188,    45,    46,    -1,    -1,    49,
-      -1,    -1,   196,   197,    -1,    -1,    56,    -1,    58,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-      70,    -1,    -1,    -1,    -1,    -1,    76,    77,    -1,    -1,
-      -1,   225,    82,    -1,    -1,   229,    -1,    87,    -1,    -1,
-      90,    -1,    -1,    -1,    -1,    -1,    -1,    97,    -1,    -1,
-      -1,    -1,    -1,    -1,   104,     3,     4,     5,   108,    -1,
-     110,   111,   112,   113,   114,    -1,    -1,    -1,    -1,    -1,
-     120,    -1,    -1,    -1,    -1,    -1,    -1,   127,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,
-      -1,    39,    -1,    -1,    -1,   145,    -1,    45,    -1,    -1,
-      -1,    49,    -1,    -1,    -1,    -1,    -1,   157,    56,    -1,
-      -1,    -1,    -1,   163,   164,   165,   166,    -1,    -1,    -1,
-     170,    -1,    70,   173,    -1,    -1,    -1,   177,    76,    77,
-      -1,    -1,    -1,    -1,    82,    -1,   186,    -1,   188,    87,
-      -1,    -1,    90,    -1,    -1,    -1,   196,   197,    -1,    97,
-      -1,    -1,    -1,    -1,    -1,    -1,   104,     3,     4,     5,
-     108,    -1,   110,   111,   112,   113,    -1,    -1,    -1,    -1,
-      -1,    -1,   120,    -1,    -1,   225,    -1,    -1,    -1,   229,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    37,    -1,    39,    -1,    -1,    -1,   145,    -1,    45,
-      -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,   157,
-      56,    -1,    -1,    -1,    -1,    -1,   164,   165,   166,    -1,
-      -1,    -1,   170,    -1,    70,   173,    -1,    -1,    -1,   177,
-      76,    77,    -1,    -1,    -1,    -1,    82,    -1,   186,    -1,
-     188,    87,    -1,    -1,    90,    -1,    -1,    -1,   196,   197,
-      -1,    97,    -1,    -1,    -1,    -1,    -1,    -1,   104,     3,
-      -1,     5,   108,    -1,   110,   111,   112,   113,    -1,    -1,
-      -1,    -1,    -1,    -1,   120,    -1,    -1,   225,    -1,    -1,
-      -1,   229,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    37,    -1,    39,    -1,    -1,    -1,   145,
-      -1,    45,    -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,
-      -1,   157,    -1,    -1,    -1,    -1,    -1,    -1,   164,   165,
-     166,    -1,    -1,    -1,   170,    -1,    70,   173,    -1,    -1,
-      -1,   177,    76,    77,    -1,    -1,    -1,    -1,    82,    -1,
-     186,    -1,   188,    87,    -1,    -1,    90,    -1,    -1,    -1,
-     196,   197,    -1,    97,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   108,    -1,   110,   111,   112,   113,
-      -1,    -1,    -1,    -1,    -1,    -1,   120,    -1,    -1,   225,
-      -1,    -1,    -1,   229,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     3,     4,     5,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   157,    14,    -1,    -1,    -1,    -1,    -1,
-     164,   165,   166,    -1,    -1,    -1,   170,    -1,    -1,   173,
-      -1,    31,    -1,   177,    -1,    -1,    -1,    37,    -1,    39,
-      -1,    -1,   186,    -1,   188,    45,    46,    -1,    -1,    49,
-      -1,    -1,   196,   197,    -1,    -1,    56,    -1,    58,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-      70,    -1,    -1,    -1,    -1,    -1,    76,    77,    -1,    -1,
-      -1,   225,    82,    -1,    -1,   229,    -1,    87,    -1,    -1,
-      90,    -1,    -1,    -1,    -1,    -1,    -1,    97,    -1,    -1,
-      -1,    -1,    -1,    -1,   104,    -1,    -1,    -1,   108,    -1,
-     110,   111,   112,   113,   114,    -1,    -1,    -1,    -1,    -1,
-     120,    -1,    -1,    -1,    -1,    -1,    -1,   127,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   145,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   157,    -1,     3,
-       4,     5,    -1,   163,   164,   165,   166,    -1,    -1,    13,
-     170,    -1,    -1,   173,    -1,    -1,    -1,   177,    -1,    -1,
-      -1,    -1,    -1,    -1,   184,    -1,   186,    31,   188,    -1,
-      -1,    -1,    -1,    37,    -1,    39,   196,   197,    -1,    -1,
-      -1,    45,    46,    -1,    -1,    49,    -1,    -1,    -1,    -1,
-      -1,    -1,    56,    -1,    58,    -1,    15,    16,    17,    18,
-      19,    20,    21,    67,    -1,   225,    70,    -1,    -1,    -1,
-      -1,    -1,    76,    77,    -1,    -1,    -1,    -1,    82,    -1,
-      -1,    -1,    -1,    87,    -1,    -1,    90,    -1,    -1,    -1,
-      -1,    -1,    -1,    97,    -1,    -1,    -1,    -1,    -1,    -1,
-     104,   105,    -1,    -1,   108,    -1,   110,   111,   112,   113,
-     114,    -1,    -1,    -1,    -1,    -1,   120,    -1,    -1,    -1,
-      -1,    -1,     3,   127,     5,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   145,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   157,    -1,    -1,    37,    -1,    39,   163,
-     164,   165,   166,    44,    45,    -1,   170,    -1,    49,   173,
-      -1,    -1,    -1,   177,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   186,    -1,   188,    -1,    -1,    -1,    -1,    70,
-      -1,    -1,   196,   197,    -1,    76,    77,    -1,    -1,    -1,
-      -1,    82,    -1,    84,    -1,    -1,    87,    -1,    -1,    90,
-      -1,    -1,    -1,    -1,    -1,    -1,    97,    -1,    -1,    -1,
-      -1,   225,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,
-     111,   112,   113,    -1,    -1,    -1,    -1,    -1,    -1,   120,
-      -1,    -1,    -1,    -1,    -1,     3,    -1,     5,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,    -1,    -1,
-      -1,    -1,   143,    -1,    -1,   224,   225,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   157,    -1,    -1,    37,
-      -1,    39,    -1,   164,   165,   166,    44,    45,    -1,   170,
-      -1,    49,   173,   174,    -1,    -1,   177,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   186,    -1,   188,    -1,    -1,
-      -1,    -1,    70,    -1,    -1,   196,   197,    -1,    76,    77,
-      -1,    -1,    -1,    -1,    82,    -1,    84,    -1,    -1,    87,
-      -1,    -1,    90,   214,    -1,    -1,    -1,    -1,    -1,    97,
-      -1,    -1,    -1,    -1,   225,    -1,    -1,    -1,    -1,    -1,
-     108,    -1,   110,   111,   112,   113,    -1,    -1,    -1,    -1,
-      -1,    -1,   120,    -1,    -1,    -1,    -1,     3,    -1,     5,
-      -1,    -1,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    -1,   143,    -1,    -1,    24,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   157,
-      -1,    37,    -1,    39,    -1,    -1,   164,   165,   166,    45,
-      -1,    -1,   170,    49,    -1,   173,   174,    -1,    -1,   177,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   186,    -1,
-     188,    -1,    -1,    -1,    70,    -1,    -1,    -1,   196,   197,
-      76,    77,    -1,    -1,    -1,    -1,    82,    -1,    -1,    -1,
-      -1,    87,    -1,    -1,    90,    -1,   214,    -1,    -1,    -1,
-      -1,    97,    -1,    -1,    -1,    -1,    -1,   225,    -1,     3,
-      -1,     5,   108,    -1,   110,   111,   112,   113,    -1,    -1,
-      -1,    -1,    -1,    -1,   120,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    37,    -1,    39,    -1,    -1,    -1,    -1,
-      -1,    45,    -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,
-      -1,   157,    -1,    -1,    -1,    -1,    -1,    -1,   164,   165,
-     166,    -1,    -1,    -1,   170,    -1,    70,   173,    -1,    -1,
-      -1,   177,    76,    77,    -1,    -1,    -1,    -1,    82,    -1,
-     186,    -1,   188,    87,    -1,    -1,    90,    -1,    -1,    -1,
-     196,   197,   205,    97,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   108,    -1,   110,   111,   112,   113,
-      -1,   224,   225,    -1,    -1,    -1,   120,    -1,   231,   225,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    -1,    -1,   157,    -1,    -1,    -1,    -1,    -1,    -1,
-     164,   165,   166,    -1,    -1,    -1,   170,    -1,    -1,   173,
-      -1,    -1,    -1,   177,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   186,    -1,   188,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   196,   197,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    -1,    -1,   205,    -1,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,    -1,    -1,    -1,
-      -1,   225,    -1,    -1,   224,   225,    -1,    -1,    -1,    -1,
-      -1,   231,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    15,
-      16,    17,    18,    19,    20,    21,    15,    16,    17,    18,
-      19,    20,    21,    -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,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     205,    -1,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   224,
-     225,   226,   205,    -1,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   224,   225,   226,    -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,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   224,   225,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   205,    -1,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,     3,    -1,     5,    -1,    -1,    -1,
-      -1,   224,   225,   209,   210,   211,   212,   213,   214,   215,
-     216,   210,   211,   212,   213,   214,   215,   216,   224,   225,
-      -1,    -1,    31,    -1,    -1,   224,   225,    -1,    37,    -1,
-      39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,    -1,
-      49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
-      -1,    70,    -1,    -1,    -1,    -1,    -1,    76,    77,    -1,
-      -1,    -1,    -1,    82,    -1,    -1,    -1,    -1,    87,    -1,
-      -1,    90,    -1,    -1,    -1,    -1,    -1,    -1,    97,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     3,    -1,     5,   108,
-      -1,   110,   111,   112,   113,   114,    -1,    -1,   117,    -1,
-      -1,   120,    -1,    -1,    -1,    -1,   125,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     3,    -1,     5,    -1,    -1,    -1,
+       2,    84,     2,     2,   239,    55,   329,     8,    82,    83,
+       2,    12,   258,     2,    88,    16,     2,    18,     2,     2,
+     258,     2,    84,   314,     2,     2,    81,    82,    83,    30,
+       2,     2,   258,    88,    35,     2,     2,   258,   395,     2,
+      41,    42,   322,     2,     2,   325,     2,   327,   632,   320,
+     330,   282,     6,   277,   278,     6,   336,   698,    28,    58,
+      17,    41,    42,    64,   706,   300,    58,   630,   349,    58,
+     115,   634,    58,    85,    58,    58,   179,    58,   631,    43,
+      58,   115,   666,    84,    45,     3,    27,   125,   115,   420,
+     421,   127,    68,   153,   316,   205,    60,   157,    75,   205,
+      70,   714,   114,   205,    29,   115,   719,    62,   179,   179,
+     205,   205,   205,   205,   205,     0,   370,   212,   212,   226,
+     212,   227,   232,   345,   231,   228,   229,   398,   188,     3,
+     232,     5,   446,   717,    59,   228,   225,    98,   148,   115,
+       3,   232,    60,     6,     7,     8,     9,    10,    11,    74,
+     111,   112,   113,   114,   205,    31,   205,    82,   229,   229,
+     121,    37,   408,   716,   200,   201,   202,   203,   204,   252,
+      44,   395,   211,     3,   758,     5,   227,     3,   226,     5,
+     205,   226,   230,   232,   419,   420,   421,   408,   226,   752,
+     252,   132,   755,   806,   277,   278,   230,   229,   168,   530,
+     753,    38,   844,   230,    17,   166,    43,   232,   211,   226,
+     171,    85,   286,   230,    44,   277,   278,   858,    44,    49,
+       3,    84,     5,    49,   505,     3,   238,     5,   231,   813,
+     185,   286,   173,   203,   236,   237,   231,   236,   237,   240,
+     241,   242,   243,   244,   236,   237,   809,   236,   237,   111,
+     312,   252,   236,   237,   807,    85,    49,   820,     9,    85,
+     205,    44,   576,   243,   244,   519,   230,   212,   225,   226,
+     144,     3,   586,   136,   520,   555,   277,   278,   232,   226,
+     526,   232,   517,   518,   231,   231,   849,   522,   526,   873,
+      83,     3,   516,     5,   520,   530,    15,    16,    17,   520,
+     526,   175,    85,   226,     3,   526,     5,   170,   231,   371,
+     309,   312,   395,   211,   144,   314,   109,   215,   144,   554,
+     226,   184,   321,     9,   230,   337,    12,   329,   231,   341,
+     610,   343,   344,   395,   226,   226,   348,    44,   230,   230,
+     339,   215,    49,   229,   615,   175,   228,   210,   410,   175,
+     213,   214,   215,   228,   585,   218,   219,   231,   226,   650,
+     211,   144,   230,   228,   227,   158,   646,   232,   231,   692,
+     371,   228,     3,   372,     5,     3,   228,     5,    85,   228,
+       3,   174,     5,   228,     3,   215,     5,   388,     3,   215,
+       5,   446,   175,   228,   395,   752,   226,     3,   400,     5,
+      17,   231,   215,   216,   217,   231,    68,   638,   394,   410,
+     228,   229,   225,   226,   415,   669,   228,   229,   672,   421,
+     226,   228,   228,   228,   678,     6,     7,   228,   228,   228,
+     676,   115,   215,   516,     9,   229,   228,   144,   211,   229,
+     231,   229,   231,   226,   231,   231,   231,   231,   231,   806,
+     676,   231,   698,   228,   516,   676,    15,    16,    17,   231,
+     698,    20,    21,   820,   231,   231,   231,   231,   175,   470,
+     469,   231,   698,   231,   231,   231,   231,   698,   231,   231,
+     228,   231,   231,   714,   708,   231,   231,   231,   719,   231,
+      44,   722,   849,   231,   213,   214,   215,   216,   217,   228,
+     231,   231,   585,   231,   231,   231,   225,   226,   215,   231,
+     231,   231,   766,   587,   231,   516,   231,   231,   764,   226,
+     522,   576,   522,   522,   231,   231,   528,   773,   528,   528,
+     522,    85,   587,   522,   231,   231,   528,   226,   522,   528,
+     225,   229,   528,   764,   528,   528,   770,   528,   229,   632,
+     528,   528,   229,   229,   211,   229,   528,   528,   233,   231,
+       5,   528,   528,   232,   563,   528,   565,   207,   207,   528,
+     528,   842,   528,   565,   563,   806,   830,   232,     3,   231,
+       9,     6,     7,     8,     9,    10,    11,     6,     9,     9,
+     144,   837,     9,     9,     9,   875,   213,   214,   215,   216,
+     217,     9,     9,   838,     9,   226,   231,   229,   225,   226,
+     864,   837,   858,   229,   664,   228,   837,   228,   228,   228,
+     858,   175,   229,   228,   207,   708,   230,   215,   229,   630,
+     632,   714,   858,   634,   717,   889,   719,   858,   232,   230,
+     205,   233,     6,   232,   205,   232,   708,   882,   710,   723,
+     885,   650,   211,   212,   213,   214,   215,   216,   217,    84,
+     232,   215,   232,   231,   666,   232,   225,   226,   723,   225,
+     232,   205,   226,   205,   232,   232,     9,   231,   205,   232,
+     232,   232,   681,   232,   232,   687,   232,   770,   687,   681,
+     692,   232,   681,   232,   232,   232,   232,   681,   161,   317,
+     701,   232,   320,   232,   232,   706,   232,   708,   770,   710,
+     328,   136,   232,   331,   232,   717,   232,   232,   232,   232,
+     338,   225,   340,   806,   232,   232,   232,   207,     3,   228,
+     232,     6,     7,     8,     9,    10,    11,   205,   185,   211,
+     205,   232,   228,   228,     3,   170,     3,     9,     6,   232,
+       6,   752,   205,   229,   755,   185,   758,   207,   228,   184,
+     226,   230,   205,   230,   212,   767,   228,   768,   767,   770,
+       5,   772,   773,   232,   232,   767,   232,   232,   767,   228,
+     398,   399,   228,   767,   228,   210,   785,   229,   213,   214,
+     215,   232,   232,   218,   219,   207,   232,   232,   232,   232,
+     211,   228,   227,   231,   228,   207,   231,   207,   809,    84,
+     232,   813,   780,   393,   228,   228,   338,   417,   572,   820,
+     554,   640,   440,   441,   442,   443,   444,   445,   446,   232,
+     701,   885,   687,   834,   526,   768,   838,   381,   838,   838,
+     576,   334,   252,   844,    94,   695,   838,   844,   849,   838,
+     697,   693,    -1,    -1,   838,    -1,    -1,   404,    -1,    -1,
+      -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   873,    -1,    -1,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   170,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   184,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   536,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     3,    -1,     5,     6,
+       7,     8,     9,    10,    11,   210,    -1,    -1,   213,   214,
+     215,    -1,    -1,   218,   219,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   231,    -1,    -1,    -1,
       37,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    -1,
-      -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,   157,    -1,
-      -1,    -1,    -1,    -1,   163,   164,   165,   166,    37,    -1,
-      39,   170,    -1,    70,   173,    -1,    45,    -1,   177,    76,
-      77,    -1,    -1,    -1,    -1,    82,    -1,   186,    -1,   188,
-      87,    -1,    -1,    90,    -1,    -1,    -1,   196,   197,    -1,
-      97,    70,    -1,    -1,    -1,    -1,    -1,    76,    77,    -1,
-      -1,   108,    -1,   110,   111,   112,   113,    -1,    87,    -1,
-      -1,    90,    -1,   120,    -1,    -1,    -1,    -1,    97,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,    -1,
-      -1,   110,   111,   112,   113,    -1,    -1,    -1,    -1,    -1,
-      -1,   120,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     157,    -1,    -1,    -1,    -1,    -1,    -1,   164,   165,   166,
-      37,    -1,    39,   170,    -1,    -1,   173,    -1,    45,    -1,
-     177,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,   186,
-      -1,   188,    -1,    -1,    -1,   164,   165,   166,    -1,   196,
-     197,   170,    -1,    70,    -1,    -1,    -1,    -1,   177,    76,
-      77,    -1,    -1,    -1,    -1,    82,    -1,   186,    -1,   188,
-      87,    -1,    -1,    90,    -1,    -1,    -1,   196,   197,    -1,
-      97,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       5,   108,    -1,   110,   111,   112,   113,    -1,    -1,    -1,
-      -1,    -1,    -1,   120,    -1,    -1,    -1,    -1,    -1,    -1,
+     588,   589,    49,   591,   592,   593,   594,   595,   596,   597,
+     598,   599,   600,   601,   602,   603,   604,   605,   606,   607,
+      -1,   609,    -1,    -1,    71,    -1,    -1,   615,    -1,    -1,
+      77,    78,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
+      -1,    88,    -1,    -1,    91,    -1,    -1,    -1,    -1,    -1,
+      -1,    98,   640,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   109,    -1,   111,   112,   113,   114,    -1,    -1,
+      -1,    -1,    -1,    -1,   121,    -1,    -1,    -1,    15,    16,
+      17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,   136,
+      -1,    -1,    -1,    -1,    -1,   206,    -1,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,    -1,    -1,    -1,
+      -1,   158,    -1,    -1,   225,   226,    -1,    -1,   165,   166,
+     167,   232,    -1,   170,   171,    -1,    -1,   174,    -1,    -1,
+      -1,   178,    -1,    -1,    -1,    -1,    -1,   184,    -1,    -1,
+     187,    -1,   189,    -1,    -1,    -1,    -1,     3,     4,     5,
+     197,   198,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   210,    -1,    -1,   213,   214,   215,    -1,
+      -1,   218,   219,    -1,    -1,    31,    -1,    -1,    -1,    -1,
+      -1,    37,    -1,    39,   231,    -1,    -1,    -1,    -1,    45,
+      46,    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
+      56,    -1,    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,
+      -1,    77,    78,    -1,   812,    -1,    -1,    83,   816,    -1,
+      -1,    -1,    88,    -1,    -1,    91,    -1,    -1,    -1,    -1,
+      -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,   105,
+     106,    -1,    -1,   109,   842,   111,   112,   113,   114,   115,
+      -1,    -1,    -1,    -1,    -1,   121,    -1,    -1,    -1,    -1,
+      -1,    -1,   128,   210,   211,   212,   213,   214,   215,   216,
+     217,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   225,   226,
+     146,    -1,     3,     4,     5,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   158,    -1,    -1,    -1,    -1,    -1,   164,   165,
+     166,   167,    -1,    -1,    -1,   171,    -1,    -1,   174,    -1,
+      31,    -1,   178,    -1,    -1,    -1,    37,    -1,    39,    -1,
+      -1,   187,    -1,   189,    45,    46,    -1,    -1,    49,    -1,
+      -1,   197,   198,    -1,    -1,    56,    -1,    58,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,
+      71,    -1,    -1,     3,     4,     5,    77,    78,    -1,    -1,
+     226,    -1,    83,    -1,   230,    -1,    -1,    88,    -1,    -1,
+      91,    -1,    -1,    -1,    -1,    -1,    -1,    98,    -1,    -1,
+      -1,    31,    -1,    -1,   105,   106,    -1,    37,   109,    39,
+     111,   112,   113,   114,   115,    45,    46,    -1,    -1,    49,
+     121,    -1,    -1,    -1,    -1,    -1,    56,   128,    58,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,
+      -1,    71,    -1,    -1,    -1,   146,    -1,    77,    78,    -1,
+      -1,    -1,    -1,    83,    -1,    -1,    -1,   158,    88,    -1,
+      -1,    91,    -1,   164,   165,   166,   167,    -1,    98,    -1,
+     171,    -1,    -1,   174,    -1,   105,    -1,   178,    -1,   109,
+      -1,   111,   112,   113,   114,   115,   187,    -1,   189,    -1,
+      -1,   121,    -1,    -1,    -1,    -1,   197,   198,   128,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
+       4,     5,    -1,    -1,    -1,    -1,   146,    -1,    15,    16,
+      17,    18,    19,    20,    21,   226,    -1,    -1,   158,   230,
+      -1,    -1,    -1,    -1,   164,   165,   166,   167,    -1,    -1,
+      -1,   171,    -1,    37,   174,    39,    -1,    -1,   178,    -1,
+      -1,    45,    -1,    -1,    -1,    49,    -1,   187,    -1,   189,
+      -1,    -1,    56,    -1,    -1,    -1,    -1,   197,   198,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,
+       3,     4,     5,    77,    78,    -1,    -1,    -1,    -1,    83,
+      -1,    -1,    -1,    -1,    88,    -1,   226,    91,    -1,    -1,
+     230,    -1,    -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,
+      -1,   105,    -1,    -1,    37,   109,    39,   111,   112,   113,
+     114,    -1,    45,    -1,    -1,    -1,    49,   121,    -1,    -1,
+      -1,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,
+      -1,    -1,   146,    -1,    77,    78,    -1,    -1,    -1,    -1,
+      83,    -1,    -1,    -1,   158,    88,    -1,    -1,    91,    -1,
+      -1,   165,   166,   167,    -1,    98,    -1,   171,    -1,    -1,
+     174,    -1,   105,    -1,   178,    -1,   109,    -1,   111,   112,
+     113,   114,    -1,   187,    -1,   189,    -1,    -1,   121,    -1,
+      -1,    -1,    -1,   197,   198,    -1,    -1,    -1,    -1,    -1,
+      -1,     3,    -1,     5,   211,   212,   213,   214,   215,   216,
+     217,    -1,    -1,   146,    -1,    -1,    -1,    -1,   225,   226,
+      -1,    -1,   226,    -1,    -1,   158,   230,    -1,    -1,    -1,
+      -1,    -1,   165,   166,   167,    37,    -1,    39,   171,    -1,
+      -1,   174,    -1,    45,    -1,   178,    -1,    49,    -1,    -1,
+      -1,    -1,    -1,    -1,   187,    -1,   189,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   197,   198,    -1,    -1,    -1,    71,
+      -1,    -1,    -1,    -1,    -1,    77,    78,    -1,    -1,    -1,
+      -1,    83,    -1,    -1,    -1,    -1,    88,    -1,    -1,    91,
+      -1,    -1,    -1,   226,    -1,    -1,    98,   230,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
+     112,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,   121,
+      -1,     0,    -1,    -1,     3,     4,     5,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    14,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    37,    -1,    39,    -1,    -1,    -1,    -1,    -1,
-      45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     157,    -1,    -1,    -1,    -1,    -1,    -1,   164,   165,   166,
-      -1,    -1,    -1,   170,    -1,    70,   173,    -1,    -1,    -1,
-     177,    76,    77,    -1,    -1,    -1,    -1,    -1,    -1,   186,
-      -1,   188,    87,    -1,    -1,    90,    -1,    -1,    -1,   196,
-     197,    -1,    97,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   110,   111,   112,   113,    -1,
-      -1,    -1,    -1,    -1,    -1,   120,    -1,    -1,    -1,    -1,
+      -1,    -1,    31,    -1,    -1,    -1,   158,    -1,    37,    -1,
+      39,    -1,    -1,   165,   166,   167,    45,    46,    -1,   171,
+      49,    -1,   174,    -1,    -1,    -1,   178,    56,    -1,    58,
+      -1,    -1,    -1,    -1,    -1,   187,    -1,   189,    -1,    68,
+      -1,    -1,    71,    -1,    -1,   197,   198,    -1,    77,    78,
+      -1,    -1,    -1,    -1,    83,    -1,    -1,    -1,    -1,    88,
+      -1,    -1,    91,    -1,    -1,    -1,    -1,    -1,    -1,    98,
+      -1,    -1,    -1,    -1,   226,    -1,   105,    -1,   230,    -1,
+     109,    -1,   111,   112,   113,   114,   115,    -1,    -1,    -1,
+      -1,    -1,   121,    -1,    -1,    -1,    -1,    -1,    -1,   128,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   146,    -1,    -1,
+       3,     4,     5,    -1,    -1,    -1,    -1,    -1,    -1,   158,
+      13,    -1,    -1,    -1,    -1,   164,   165,   166,   167,    -1,
+      -1,    -1,   171,    -1,    -1,   174,    -1,    -1,    31,   178,
+      -1,    -1,    -1,    -1,    37,    -1,    39,    -1,   187,    -1,
+     189,    -1,    45,    46,    -1,    -1,    49,    -1,   197,   198,
+      -1,    -1,    -1,    56,    -1,    58,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,
+      -1,    -1,    -1,    -1,    77,    78,    -1,   226,    -1,    -1,
+      83,    -1,    -1,    -1,    -1,    88,    -1,    -1,    91,    -1,
+      -1,    -1,     3,    -1,     5,    98,    -1,    -1,    -1,    -1,
+      -1,    -1,   105,   106,    -1,    -1,   109,    -1,   111,   112,
+     113,   114,   115,    -1,    -1,    -1,    -1,    -1,   121,    -1,
+      -1,    -1,    -1,    -1,    -1,   128,    37,    -1,    39,    -1,
+      -1,    -1,    -1,    44,    45,    -1,    -1,    -1,    49,    -1,
+      -1,    -1,    -1,   146,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   158,    -1,    -1,    -1,    -1,
+      71,   164,   165,   166,   167,    -1,    77,    78,   171,    -1,
+      -1,   174,    83,    -1,    85,   178,    -1,    88,    -1,    -1,
+      91,    -1,    -1,    -1,   187,    -1,   189,    98,    -1,    -1,
+      -1,    -1,    -1,    -1,   197,   198,    -1,    -1,   109,    -1,
+     111,   112,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,
+     121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   226,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   144,    -1,    -1,    -1,    -1,     3,    -1,
+       5,    -1,    -1,    -1,    -1,    -1,    -1,   158,    -1,    -1,
+      -1,    -1,    -1,    -1,   165,   166,   167,    -1,    -1,    -1,
+     171,    -1,    -1,   174,   175,    -1,    -1,   178,    -1,    -1,
+      -1,    -1,    37,    -1,    39,    -1,   187,    -1,   189,    44,
+      45,    -1,    -1,    -1,    49,    -1,   197,   198,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   215,    -1,    71,    -1,    -1,     3,
+      -1,     5,    77,    78,    -1,   226,    -1,    -1,    83,    -1,
+      85,    -1,    -1,    88,    -1,    -1,    91,    -1,    -1,    -1,
+      24,    -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    37,   109,    39,   111,   112,   113,   114,
+      -1,    45,    -1,    -1,    -1,    49,   121,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    -1,    -1,    71,    -1,   144,
+      -1,    -1,    -1,    77,    78,    -1,    -1,    -1,    -1,    83,
+      -1,    -1,    -1,   158,    88,    -1,    -1,    91,    -1,    -1,
+     165,   166,   167,    -1,    98,    -1,   171,    -1,    -1,   174,
+     175,    -1,    -1,   178,    -1,   109,    -1,   111,   112,   113,
+     114,    -1,   187,    -1,   189,    -1,    -1,   121,    -1,    -1,
+      -1,    -1,   197,   198,    -1,    -1,    -1,    -1,    -1,    -1,
+       3,    -1,     5,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     215,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      -1,   226,    -1,    -1,   158,    -1,    -1,    -1,    -1,    -1,
+      -1,   165,   166,   167,    37,    -1,    39,   171,    -1,    -1,
+     174,    -1,    45,    -1,   178,    -1,    49,    -1,    -1,    -1,
+      -1,    -1,    -1,   187,    -1,   189,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   197,   198,    -1,    -1,    -1,    71,    -1,
+      -1,    -1,    -1,    -1,    77,    78,    -1,    -1,    -1,    -1,
+      83,    -1,    -1,    -1,    -1,    88,    -1,    -1,    91,    -1,
+      -1,    -1,   226,    -1,    -1,    98,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    -1,   109,    -1,   111,   112,
+     113,   114,    -1,    -1,    -1,    -1,    -1,   206,   121,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   225,   226,    -1,    -1,
+      -1,    -1,    -1,   232,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    -1,    -1,   158,    -1,    -1,    -1,    -1,
+      -1,    -1,   165,   166,   167,    -1,    -1,    -1,   171,    -1,
+      -1,   174,    -1,    -1,    -1,   178,    -1,    15,    16,    17,
+      18,    19,    20,    21,   187,    23,   189,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   197,   198,    -1,    -1,    -1,    -1,
+      -1,    -1,   206,    -1,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   225,   226,   226,    -1,    -1,    -1,    -1,   232,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    15,
+      16,    17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   206,    -1,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,    15,
+      16,    17,    18,    19,    20,    21,   225,   226,   227,    -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,   206,    -1,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   225,   226,   227,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   225,   226,    -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,    -1,    -1,    -1,    -1,   164,
-     165,   166,    -1,    -1,    -1,   170,    -1,    -1,    -1,    -1,
-      -1,    -1,   177,    -1,    -1,    -1,    -1,    25,    26,    -1,
-      -1,   186,    30,   188,    32,    33,    34,    35,    36,    -1,
-      38,   196,   197,    41,    -1,    43,    -1,    -1,    -1,    47,
-      48,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
-      -1,    59,    60,    61,    62,    63,    64,    65,    66,    -1,
-      68,    -1,    -1,    71,    72,    73,    74,    75,    -1,    -1,
-      78,    79,    80,    81,    -1,    -1,    -1,    85,    86,    -1,
-      88,    89,    -1,    91,    92,    93,    94,    95,    96,    -1,
-      98,    99,   100,   101,   102,   103,    -1,    -1,   106,    -1,
-      -1,   109,    -1,    -1,    -1,    -1,    -1,   115,   116,    -1,
-     118,   119,    -1,   121,   122,   123,    -1,    -1,    -1,    -1,
-     128,   129,   130,    -1,   132,   133,   134,    -1,   136,   137,
-     138,   139,   140,   141,   142,    -1,   144,    -1,   146,    -1,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,    -1,
-     158,   159,    -1,   161,   162,    -1,    -1,    -1,    -1,    -1,
-     168,    -1,    -1,   171,    -1,   173,    -1,   175,   176,    -1,
-      -1,   179,   180,   181,   182,    -1,    -1,   185,    -1,   187,
-      -1,   189,   190,   191,   192,   193,   194,   195,    -1,    -1,
-     198
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   225,
+     226,   206,    -1,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     225,   226,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   225,
+     226,    -1,    -1,     3,    -1,     5,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   225,
+     226,    31,    -1,    -1,    -1,    -1,    -1,    37,    -1,    39,
+      -1,    -1,    -1,    -1,    -1,    45,    46,    -1,    -1,    49,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,
+      -1,    71,    -1,    -1,     3,    -1,     5,    77,    78,    -1,
+      -1,    -1,    -1,    83,    -1,    -1,    -1,    -1,    88,    -1,
+      -1,    91,    -1,    -1,    -1,    -1,    -1,    -1,    98,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,   109,
+      39,   111,   112,   113,   114,   115,    45,    -1,   118,    -1,
+      49,   121,    -1,    -1,    -1,    -1,   126,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    77,    78,
+      -1,    -1,    -1,    -1,    83,    -1,    -1,    -1,   158,    88,
+      -1,    -1,    91,    -1,   164,   165,   166,   167,    -1,    98,
+      -1,   171,    -1,    -1,   174,    -1,    -1,    -1,   178,     3,
+     109,     5,   111,   112,   113,   114,    -1,   187,    -1,   189,
+      -1,    -1,   121,    -1,    -1,    -1,    -1,   197,   198,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    37,    -1,    39,    -1,    -1,    -1,    -1,
+      -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   158,
+      -1,    -1,    -1,    -1,    -1,    -1,   165,   166,   167,    -1,
+      -1,     3,   171,     5,    -1,   174,    -1,    71,    -1,   178,
+      -1,    -1,    -1,    77,    78,    -1,    -1,    -1,   187,    -1,
+     189,    -1,     5,    -1,    88,    -1,    -1,    91,   197,   198,
+      -1,    -1,    -1,    -1,    98,    37,    -1,    39,    -1,    -1,
+      -1,    -1,    -1,    45,    -1,    -1,    -1,   111,   112,   113,
+     114,    -1,    -1,    -1,    37,    -1,    39,   121,    -1,    -1,
+      -1,    -1,    45,    -1,    -1,    -1,    49,    -1,    -1,    71,
+      -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    71,    91,
+      -1,    -1,    -1,    -1,    77,    78,    98,    -1,    -1,    -1,
+      83,   165,   166,   167,    -1,    88,    -1,   171,    91,   111,
+     112,   113,   114,    -1,   178,    98,    -1,    -1,    -1,   121,
+      -1,    -1,    -1,   187,    -1,   189,   109,     5,   111,   112,
+     113,   114,    -1,   197,   198,    -1,    -1,    -1,   121,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,
+      -1,    39,    -1,    -1,   166,   167,    -1,    45,    -1,   171,
+      -1,    -1,    -1,    -1,    -1,   158,    -1,    -1,    -1,    -1,
+      -1,    -1,   165,   166,   167,    -1,    -1,   189,   171,    -1,
+      -1,   174,    -1,    71,    -1,   178,   198,    -1,    -1,    77,
+      78,    -1,    -1,    -1,   187,    -1,   189,    -1,    -1,    -1,
+      88,    -1,    -1,    91,   197,   198,    -1,    -1,    -1,    -1,
+      98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   111,   112,   113,   114,    -1,    -1,    -1,
+      -1,    -1,    -1,   121,    -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,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   165,   166,   167,
+      -1,    -1,    -1,   171,    -1,    -1,    -1,    -1,    -1,    -1,
+     178,    -1,    -1,    -1,    -1,    25,    26,    -1,    -1,   187,
+      30,   189,    32,    33,    34,    35,    36,    -1,    38,   197,
+     198,    41,    -1,    43,    -1,    -1,    -1,    47,    48,    -1,
+      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    59,
+      60,    61,    -1,    63,    64,    65,    66,    67,    -1,    69,
+      -1,    -1,    72,    73,    74,    75,    76,    -1,    -1,    79,
+      80,    81,    82,    -1,    -1,    -1,    86,    87,    -1,    89,
+      90,    -1,    92,    93,    94,    95,    96,    97,    -1,    99,
+     100,   101,   102,   103,   104,    -1,    -1,   107,    -1,    -1,
+     110,    -1,    -1,    -1,    -1,    -1,   116,   117,    -1,   119,
+     120,    -1,   122,   123,   124,    -1,    -1,    -1,    -1,   129,
+     130,   131,    -1,   133,   134,   135,    -1,   137,   138,   139,
+     140,   141,   142,   143,    -1,   145,    -1,   147,    -1,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,    -1,   159,
+     160,    -1,   162,   163,    -1,    -1,    -1,    -1,    -1,   169,
+      -1,    -1,   172,    -1,   174,    -1,   176,   177,    -1,    -1,
+     180,   181,   182,   183,    -1,    -1,   186,    -1,   188,    -1,
+     190,   191,   192,   193,   194,   195,   196,    -1,    -1,   199
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_int16 yystos[] =
 {
-       0,   234,   240,     0,     3,     4,     5,    14,    31,    37,
-      39,    45,    46,    49,    56,    58,    67,    70,    76,    77,
-      82,    87,    90,    97,   104,   108,   110,   111,   112,   113,
-     114,   120,   127,   145,   157,   163,   164,   165,   166,   170,
-     173,   177,   186,   188,   196,   197,   225,   235,   237,   246,
-     247,   249,   250,   251,   252,   255,   256,   262,   263,   279,
-     293,   296,   298,   300,   301,   302,   303,   306,   307,   308,
-     309,   310,   311,   312,   315,   316,   319,   323,   328,   333,
-     334,   335,   336,   338,   341,   359,   360,   361,   362,   363,
-     224,   225,   365,   368,   369,     3,     5,   296,   296,   230,
-     228,   296,     3,   295,   296,   110,   299,     9,   296,   299,
-       3,   230,   296,   230,   299,   300,     3,   295,     3,   295,
-     300,    25,    26,    30,    32,    33,    34,    35,    36,    38,
-      41,    43,    47,    48,    50,    51,    52,    53,    54,    55,
-      57,    59,    60,    61,    62,    63,    64,    65,    66,    68,
-      71,    72,    73,    74,    75,    78,    79,    80,    81,    85,
-      86,    88,    89,    91,    92,    93,    94,    95,    96,    98,
-      99,   100,   101,   102,   103,   106,   109,   115,   116,   118,
-     119,   121,   122,   123,   128,   129,   130,   132,   133,   134,
-     136,   137,   138,   139,   140,   141,   142,   144,   146,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   158,   159,
-     161,   162,   168,   171,   173,   175,   176,   179,   180,   181,
-     182,   185,   187,   189,   190,   191,   192,   193,   194,   195,
-     198,   264,   270,   358,   227,   242,   242,   184,    76,   117,
-     125,   177,   186,   254,   279,   306,   308,   310,   323,   332,
-     338,   359,   363,   227,     3,   296,   210,   227,   227,   227,
-     228,   227,   315,   227,   245,   227,   340,   341,   340,   340,
-      44,    84,   143,   174,   214,   230,   272,   296,   297,   342,
-     343,   356,   279,   359,   361,   363,   340,   227,    29,    59,
-      73,    81,   370,   371,   365,   114,     9,   236,   228,   227,
-     210,     3,    60,   361,   228,   178,   228,   230,   230,   230,
-     230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
-     230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
-     230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
-     230,   230,   230,   230,   230,   230,   230,   204,   226,    13,
-      58,   105,   239,   246,   253,   256,   306,   307,   308,   309,
-     310,   311,   312,   315,   323,   328,   333,   229,   262,   263,
-       3,   296,   296,     3,     3,   228,   228,   228,   228,   329,
-     228,   356,   224,   298,   301,   302,   303,   304,   305,   241,
-     228,   337,   342,   342,   232,   225,   230,   261,   340,   230,
-     204,   226,     5,   231,   114,   229,   262,   275,   276,   277,
-     278,   324,   206,   206,   231,   286,   230,   289,   268,   338,
-       9,     9,    12,   271,   297,     3,     6,     7,     8,     9,
-      10,    11,    83,   135,   169,   183,   209,   212,   213,   214,
-     217,   218,   230,   282,   283,   284,   268,     6,   267,   271,
-     282,   285,     9,     9,   265,   285,   338,   284,     9,     9,
-     284,     9,   284,   282,   260,   263,   338,   284,   280,   281,
-     282,    27,   131,   172,   266,     9,   358,     9,   284,   361,
-     280,   269,   338,   282,   361,   126,   199,   200,   201,   202,
-     203,   357,   361,   361,   271,     6,     7,   364,     9,   361,
-     270,   225,   228,   230,   227,   227,   227,   228,   227,   227,
-     245,   338,   313,   313,   229,   206,   320,   244,   296,   214,
-     214,   204,   211,   240,   147,   317,   323,   336,   342,   231,
-     285,   214,   226,   282,   257,   258,   259,   260,    28,    69,
-     167,   202,   372,   373,   371,   228,   302,   297,   229,   204,
-     232,   296,   321,   322,     6,   248,   248,   229,   262,   287,
-     262,   291,   229,   263,   288,   291,   231,   204,   231,   231,
-     231,   230,   282,   282,   282,   282,   282,   282,     5,   282,
-     339,   341,   360,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,   205,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   224,   225,   204,   231,   231,   224,   231,
-     204,   231,   231,   204,   231,   231,   231,   231,   231,   231,
-     231,   231,   231,   231,   231,   338,   214,   230,   261,   272,
-     297,   348,   350,   351,   231,   204,   231,   231,   231,   231,
-     231,   204,   231,   231,   231,   204,   231,   231,   231,   231,
-     231,   231,   224,   231,   231,   231,   270,   238,     9,   243,
-     342,   352,   229,   262,   314,   229,   245,   302,   303,   160,
-     327,   229,   246,   263,   304,   229,   206,   124,   291,   318,
-     227,   226,   226,   231,   204,   204,   231,   184,   366,   367,
-     210,   278,   284,   204,   325,     6,   231,   231,   338,   363,
-     338,   359,   231,   227,   227,   267,   339,   231,   214,   230,
-     261,   272,   344,   346,   347,   360,   340,   282,   282,     3,
-     282,   282,   282,   282,   282,   282,   282,   282,   282,   282,
-     282,   282,   282,   282,   282,   282,   282,     3,   282,   284,
-       6,   285,     9,   350,   337,   214,   257,   272,   349,   350,
-     230,   261,   281,   284,   268,     6,   114,   229,   231,   242,
-     204,   245,    67,   114,   330,   331,   245,   302,   303,   326,
-     228,   245,   206,   227,   229,   263,   292,   293,   229,    24,
-     260,   373,   369,   229,   366,   305,   321,   211,   348,   354,
-     355,   227,   342,   294,   297,   346,   337,   214,   257,   272,
-     345,   346,   231,   230,   261,   340,   206,   226,   231,   350,
-     337,   231,   350,   231,   257,   231,   302,   245,   229,   342,
-     296,   296,   301,   227,   227,   204,   244,   227,     5,   211,
-     206,   353,   204,   227,   228,   231,   346,   337,   231,   350,
-     231,   282,   257,   282,   350,   231,   210,   296,   302,   303,
-     229,   227,   227,   285,   354,   273,   350,   231,   305,   245,
-      43,    60,   229,   274,   211,   284,   206,   227,   206,   227,
-     290,   291,   290,   227
+       0,   235,   241,     0,     3,     4,     5,    14,    31,    37,
+      39,    45,    46,    49,    56,    58,    68,    71,    77,    78,
+      83,    88,    91,    98,   105,   109,   111,   112,   113,   114,
+     115,   121,   128,   146,   158,   164,   165,   166,   167,   171,
+     174,   178,   187,   189,   197,   198,   226,   236,   238,   247,
+     248,   250,   251,   252,   253,   256,   257,   263,   264,   280,
+     294,   297,   299,   301,   302,   303,   304,   307,   308,   309,
+     310,   311,   312,   313,   316,   317,   320,   324,   327,   332,
+     337,   338,   339,   340,   342,   345,   363,   364,   365,   366,
+     367,   225,   226,   369,   372,   373,     3,     5,   297,   297,
+     231,   229,   297,     3,   296,   297,   111,   300,     9,   297,
+     300,     3,   231,   297,   231,   300,   301,     3,   296,     3,
+     296,   301,    25,    26,    30,    32,    33,    34,    35,    36,
+      38,    41,    43,    47,    48,    50,    51,    52,    53,    54,
+      55,    57,    59,    60,    61,    63,    64,    65,    66,    67,
+      69,    72,    73,    74,    75,    76,    79,    80,    81,    82,
+      86,    87,    89,    90,    92,    93,    94,    95,    96,    97,
+      99,   100,   101,   102,   103,   104,   107,   110,   116,   117,
+     119,   120,   122,   123,   124,   129,   130,   131,   133,   134,
+     135,   137,   138,   139,   140,   141,   142,   143,   145,   147,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   159,
+     160,   162,   163,   169,   172,   174,   176,   177,   180,   181,
+     182,   183,   186,   188,   190,   191,   192,   193,   194,   195,
+     196,   199,   265,   271,   362,   228,   243,   243,    62,   185,
+      77,   118,   126,   178,   187,   255,   280,   307,   309,   311,
+     324,   336,   342,   363,   367,   228,     3,   297,   211,   228,
+     228,   228,   229,   228,   316,   228,   246,   228,   344,   345,
+     344,   344,    44,    85,   144,   175,   215,   231,   273,   297,
+     298,   346,   347,   360,   280,   363,   365,   367,   344,   228,
+      29,    59,    74,    82,   374,   375,   369,   115,     9,   237,
+     229,   228,   211,     3,    60,   365,   229,   179,   229,   231,
+     231,   231,   231,   231,   231,   231,   231,   231,   231,   231,
+     231,   231,   231,   231,   231,   231,   231,   231,   231,   231,
+     231,   231,   231,   231,   231,   231,   231,   231,   231,   231,
+     231,   231,   231,   231,   231,   231,   231,   231,   231,   205,
+     227,    13,    58,   106,   240,   247,   254,   257,   307,   308,
+     309,   310,   311,   312,   313,   316,   324,   327,   332,   337,
+     230,   365,   263,   264,     3,   297,   297,     3,     3,   229,
+     229,   229,   229,   333,   229,   360,   225,   299,   302,   303,
+     304,   305,   306,   242,   229,   341,   346,   346,   233,   226,
+     231,   262,   344,   231,   205,   227,     5,   232,   115,   230,
+     263,   276,   277,   278,   279,   325,   207,   207,   232,   287,
+     231,   290,   269,   342,     9,     9,    12,   272,   298,     3,
+       6,     7,     8,     9,    10,    11,    84,   136,   170,   184,
+     210,   213,   214,   215,   218,   219,   231,   283,   284,   285,
+     269,     6,   268,   272,   283,   286,     9,     9,   266,   286,
+     342,   285,     9,     9,   285,     9,   285,   283,   261,   264,
+     342,   285,   281,   282,   283,    27,   132,   173,   267,     9,
+     362,     9,   285,   365,   281,   270,   342,   283,   365,   127,
+     200,   201,   202,   203,   204,   361,   365,   365,   272,     6,
+       7,   368,     9,   365,   271,   226,   229,   231,   228,   228,
+     228,   229,   228,   228,   246,   298,   342,   314,   314,   230,
+     207,   321,   245,   297,   215,   215,   205,   212,   241,   148,
+     318,   324,   340,   346,   232,   286,   215,   227,   283,   258,
+     259,   260,   261,    28,    70,   168,   203,   376,   377,   375,
+     229,   303,   298,   230,   205,   233,   297,   322,   323,     6,
+     249,   249,   230,   263,   288,   263,   292,   230,   264,   289,
+     292,   232,   205,   232,   232,   232,   231,   283,   283,   283,
+     283,   283,   283,     5,   283,   343,   345,   364,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,   206,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   225,   226,
+     205,   232,   232,   225,   232,   205,   232,   232,   205,   232,
+     232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
+     342,   215,   231,   262,   273,   298,   352,   354,   355,   232,
+     205,   232,   232,   232,   232,   232,   205,   232,   232,   232,
+     205,   232,   232,   232,   232,   232,   232,   225,   232,   232,
+     232,   271,   239,     9,   244,   211,   231,   346,   356,   230,
+     263,   315,   230,   246,   303,   304,   161,   331,   230,   247,
+     263,   264,   305,   230,   207,   125,   292,   319,   228,   227,
+     227,   232,   205,   205,   232,   185,   370,   371,   211,   279,
+     285,   205,   326,     6,   232,   232,   342,   367,   342,   363,
+     232,   228,   228,   268,   343,   232,   215,   231,   262,   273,
+     348,   350,   351,   364,   344,   283,   283,     3,   283,   283,
+     283,   283,   283,   283,   283,   283,   283,   283,   283,   283,
+     283,   283,   283,   283,   283,     3,   283,   285,     6,   286,
+       9,   354,   341,   215,   258,   273,   353,   354,   231,   262,
+     282,   285,   269,     6,   115,   230,   232,   243,   328,   258,
+     205,   246,    68,   115,   334,   335,   246,   303,   304,   330,
+     229,   246,   207,   228,   230,   264,   293,   294,   230,    24,
+     261,   377,   373,   230,   370,   306,   322,   212,   352,   358,
+     359,   228,   346,   295,   298,   350,   341,   215,   258,   273,
+     349,   350,   232,   231,   262,   344,   207,   227,   232,   354,
+     341,   232,   354,   232,   258,   232,   303,   246,   230,   323,
+     232,   346,   297,   297,   302,   228,   228,   205,   245,   228,
+       5,   212,   207,   357,   205,   228,   229,   232,   350,   341,
+     232,   354,   232,   283,   258,   283,   354,   232,   211,   212,
+     246,   297,   303,   304,   230,   228,   228,   286,   358,   274,
+     354,   232,   306,   231,   246,    43,    60,   230,   275,   212,
+     258,   285,   207,   228,   232,   207,   228,   291,   292,   329,
+     291,   228,   246
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_int16 yyr1[] =
 {
-       0,   233,   234,   235,   235,   236,   236,   237,   238,   238,
-     239,   240,   241,   240,   240,   240,   240,   240,   240,   240,
-     240,   240,   240,   240,   240,   240,   240,   242,   242,   242,
-     243,   242,   242,   242,   242,   242,   242,   242,   242,   242,
-     242,   242,   242,   242,   244,   244,   245,   245,   246,   246,
-     246,   246,   246,   246,   246,   247,   247,   248,   248,   249,
-     249,   249,   249,   249,   249,   249,   249,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   257,   258,   258,   259,
-     259,   260,   260,   261,   261,   261,   262,   262,   263,   264,
-     264,   264,   265,   265,   266,   266,   266,   267,   267,   268,
-     269,   270,   270,   270,   270,   270,   270,   270,   270,   270,
-     270,   270,   270,   270,   270,   270,   270,   270,   270,   270,
-     270,   270,   270,   270,   270,   270,   270,   270,   270,   270,
-     270,   270,   270,   270,   270,   270,   270,   270,   270,   270,
-     270,   270,   270,   270,   270,   270,   270,   270,   270,   270,
-     270,   270,   270,   270,   270,   270,   270,   270,   270,   270,
-     270,   270,   270,   270,   270,   270,   270,   270,   270,   270,
-     270,   270,   270,   270,   270,   270,   270,   270,   270,   270,
-     270,   270,   270,   270,   270,   270,   270,   270,   270,   270,
-     270,   270,   270,   270,   270,   270,   270,   270,   270,   270,
-     270,   270,   270,   270,   270,   270,   270,   270,   270,   270,
-     270,   271,   271,   272,   272,   272,   272,   273,   273,   274,
-     274,   275,   275,   275,   276,   276,   277,   278,   278,   279,
-     280,   280,   281,   281,   282,   282,   282,   282,   282,   282,
-     282,   282,   282,   282,   282,   282,   282,   282,   282,   282,
-     282,   282,   282,   282,   282,   282,   282,   282,   282,   282,
-     282,   282,   282,   282,   282,   282,   282,   282,   282,   282,
-     282,   282,   282,   282,   282,   283,   283,   284,   285,   286,
+       0,   234,   235,   236,   236,   237,   237,   238,   239,   239,
+     240,   241,   242,   241,   241,   241,   241,   241,   241,   241,
+     241,   241,   241,   241,   241,   241,   241,   241,   243,   243,
+     243,   244,   243,   243,   243,   243,   243,   243,   243,   243,
+     243,   243,   243,   243,   243,   243,   245,   245,   246,   246,
+     247,   247,   247,   247,   247,   247,   247,   248,   248,   249,
+     249,   250,   250,   250,   250,   250,   250,   250,   250,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   258,   259,
+     259,   260,   260,   261,   261,   262,   262,   262,   263,   263,
+     264,   265,   265,   265,   266,   266,   267,   267,   267,   268,
+     268,   269,   270,   271,   271,   271,   271,   271,   271,   271,
+     271,   271,   271,   271,   271,   271,   271,   271,   271,   271,
+     271,   271,   271,   271,   271,   271,   271,   271,   271,   271,
+     271,   271,   271,   271,   271,   271,   271,   271,   271,   271,
+     271,   271,   271,   271,   271,   271,   271,   271,   271,   271,
+     271,   271,   271,   271,   271,   271,   271,   271,   271,   271,
+     271,   271,   271,   271,   271,   271,   271,   271,   271,   271,
+     271,   271,   271,   271,   271,   271,   271,   271,   271,   271,
+     271,   271,   271,   271,   271,   271,   271,   271,   271,   271,
+     271,   271,   271,   271,   271,   271,   271,   271,   271,   271,
+     271,   271,   271,   271,   271,   271,   271,   271,   271,   271,
+     271,   271,   271,   272,   272,   273,   273,   273,   273,   274,
+     274,   275,   275,   276,   276,   276,   277,   277,   278,   279,
+     279,   280,   281,   281,   282,   282,   283,   283,   283,   283,
+     283,   283,   283,   283,   283,   283,   283,   283,   283,   283,
+     283,   283,   283,   283,   283,   283,   283,   283,   283,   283,
+     283,   283,   283,   283,   283,   283,   283,   283,   283,   283,
+     283,   283,   283,   283,   283,   283,   283,   284,   284,   285,
      286,   287,   287,   288,   288,   289,   289,   290,   290,   291,
-     291,   292,   293,   293,   294,   294,   295,   295,   296,   296,
-     297,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-     298,   298,   299,   299,   300,   300,   300,   300,   300,   300,
-     300,   300,   300,   301,   301,   302,   302,   303,   304,   304,
-     304,   304,   304,   305,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   313,   314,   314,   315,   316,   317,   317,
-     318,   318,   319,   319,   320,   320,   320,   321,   322,   322,
-     323,   324,   325,   323,   326,   326,   326,   326,   327,   327,
-     329,   328,   328,   330,   330,   331,   332,   333,   334,   334,
-     334,   335,   336,   337,   337,   338,   338,   339,   339,   340,
-     340,   341,   341,   341,   342,   342,   342,   343,   343,   343,
-     343,   344,   344,   344,   345,   345,   346,   346,   347,   347,
-     347,   347,   347,   348,   348,   348,   349,   349,   350,   350,
-     351,   351,   351,   351,   351,   351,   352,   352,   353,   353,
-     354,   355,   355,   356,   356,   357,   357,   357,   357,   357,
-     357,   358,   358,   358,   359,   360,   360,   360,   360,   360,
-     360,   360,   360,   360,   360,   361,   361,   361,   362,   363,
-     363,   364,   364,   364,   365,   365,   366,   366,   367,   368,
-     369,   369,   370,   370,   371,   371,   371,   371,   372,   372,
-     373,   373,   373,   373
+     291,   292,   292,   293,   294,   294,   295,   295,   296,   296,
+     297,   297,   298,   299,   299,   299,   299,   299,   299,   299,
+     299,   299,   299,   299,   300,   300,   301,   301,   301,   301,
+     301,   301,   301,   301,   301,   302,   302,   303,   303,   304,
+     305,   305,   305,   305,   305,   306,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   314,   315,   315,   316,   317,
+     318,   318,   319,   319,   320,   320,   321,   321,   321,   322,
+     323,   323,   324,   325,   326,   324,   327,   328,   329,   327,
+     330,   330,   330,   330,   331,   331,   333,   332,   332,   334,
+     334,   335,   336,   337,   338,   338,   338,   339,   340,   341,
+     341,   342,   342,   343,   343,   344,   344,   345,   345,   345,
+     346,   346,   346,   347,   347,   347,   347,   348,   348,   348,
+     349,   349,   350,   350,   351,   351,   351,   351,   351,   352,
+     352,   352,   353,   353,   354,   354,   355,   355,   355,   355,
+     355,   355,   356,   356,   357,   357,   358,   359,   359,   360,
+     360,   361,   361,   361,   361,   361,   361,   362,   362,   362,
+     363,   364,   364,   364,   364,   364,   364,   364,   364,   364,
+     364,   365,   365,   365,   366,   367,   367,   368,   368,   368,
+     369,   369,   370,   370,   371,   372,   373,   373,   374,   374,
+     375,   375,   375,   375,   376,   376,   377,   377,   377,   377
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
 static const yytype_int8 yyr2[] =
 {
        0,     2,     2,     0,     2,     0,     7,     4,     0,     7,
-       4,     0,     0,     6,     3,     3,     2,     3,     2,     3,
-       2,     3,     2,     2,     2,     2,     2,     0,     3,     3,
-       0,     6,     2,     3,     2,     3,     2,     3,     2,     2,
-       2,     2,     2,     2,     0,     2,     0,     1,     1,     2,
-       2,     1,     2,     1,     1,     6,     6,     1,     2,     1,
-       2,     1,     2,     1,     2,     2,     2,     2,     4,     3,
-       3,     5,     2,     3,     4,     0,     1,     1,     3,     1,
-       3,     3,     2,     3,     3,     2,     0,     1,     3,     1,
-       3,     4,     1,     3,     1,     1,     1,     1,     3,     3,
-       3,     0,     4,     1,     4,     1,     1,     1,     1,     1,
-       4,     4,     1,     1,     1,     1,     1,     4,     4,     1,
-       6,     1,     1,     1,     1,     4,     1,     1,     1,     4,
-       1,     1,     1,     4,     4,     1,     1,     4,     1,     1,
-       1,     1,     1,     4,     4,     4,     4,     4,     1,     4,
-       1,     1,     4,     1,     4,     1,     1,     4,     4,     1,
-       1,     1,     4,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     4,     1,     1,     1,     4,     4,
-       1,     1,     1,     1,     1,     6,     1,     4,     1,     1,
-       1,     4,     1,     4,     1,     1,     4,     4,     4,     4,
-       1,     1,     4,     4,     4,     1,     1,     4,     4,     4,
-       1,     1,     1,     1,     1,     1,     1,     0,     2,     4,
-       3,     0,     2,     1,     1,     3,     2,     3,     1,     5,
-       1,     3,     0,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     5,     3,     3,     3,     3,     3,
+       4,     0,     0,     6,     3,     3,     2,     2,     3,     2,
+       3,     2,     3,     2,     2,     2,     2,     2,     0,     3,
+       3,     0,     6,     2,     2,     3,     2,     3,     2,     3,
+       2,     2,     2,     2,     2,     2,     0,     2,     0,     1,
+       1,     2,     2,     1,     2,     1,     1,     6,     6,     1,
+       2,     1,     2,     1,     2,     1,     2,     2,     2,     2,
+       4,     3,     3,     5,     2,     3,     4,     0,     1,     1,
+       3,     1,     3,     3,     2,     3,     3,     2,     0,     1,
+       3,     1,     3,     4,     1,     3,     1,     1,     1,     1,
+       3,     3,     3,     0,     4,     1,     4,     1,     1,     1,
+       1,     1,     4,     4,     1,     1,     1,     1,     1,     4,
+       4,     1,     6,     1,     1,     1,     1,     4,     1,     1,
+       1,     4,     1,     1,     1,     4,     4,     1,     1,     4,
+       1,     1,     1,     1,     1,     4,     4,     4,     4,     4,
+       1,     4,     1,     1,     4,     1,     4,     1,     1,     4,
+       4,     1,     1,     1,     4,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     4,     1,     1,     1,
+       4,     4,     1,     1,     1,     1,     1,     6,     1,     4,
+       1,     1,     1,     4,     1,     4,     1,     1,     4,     4,
+       4,     4,     1,     1,     4,     4,     4,     1,     1,     4,
+       4,     4,     1,     1,     1,     1,     1,     1,     1,     0,
+       2,     4,     3,     0,     2,     1,     1,     3,     2,     3,
+       1,     5,     1,     3,     0,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     5,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     2,     2,     2,     2,     2,     2,     3,
-       3,     5,     5,     4,     3,     1,     3,     1,     1,     0,
-       2,     4,     3,     2,     2,     0,     2,     2,     1,     3,
-       2,     1,     3,     2,     0,     1,     0,     1,     1,     1,
-       1,     1,     1,     1,     2,     2,     1,     1,     1,     1,
-       1,     1,     0,     1,     1,     2,     1,     2,     2,     1,
-       1,     1,     1,     2,     3,     1,     2,     4,     1,     1,
-       2,     1,     2,     1,     3,     2,     6,     2,     6,     2,
-       5,     2,     0,     2,     3,     3,     2,     1,     2,     3,
-       2,     3,     6,     6,     0,     2,     2,     1,     1,     3,
-       2,     0,     0,     7,     1,     1,     3,     3,     0,     2,
-       0,     9,     2,     2,     3,     2,     2,     6,     1,     1,
-       1,     1,     1,     0,     2,     2,     3,     2,     3,     0,
-       1,     2,     2,     2,     3,     2,     1,     1,     3,     2,
-       4,     3,     2,     1,     3,     2,     0,     1,     3,     2,
-       1,     3,     4,     3,     2,     1,     3,     2,     0,     1,
-       1,     3,     2,     1,     3,     4,     1,     3,     0,     2,
-       2,     1,     3,     1,     3,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     5,     1,     1,     1,     2,     1,
-       2,     1,     2,     4,     1,     1,     2,     1,     5,     5,
-      10,     1,     3,     1,     0,     2,     0,     2,     4,     6,
-       0,     3,     1,     3,     4,     1,     1,     1,     1,     3,
-       1,     1,     1,     1
+       3,     3,     3,     3,     3,     2,     2,     2,     2,     2,
+       2,     3,     3,     5,     5,     4,     3,     1,     3,     1,
+       1,     0,     2,     4,     3,     2,     2,     0,     2,     2,
+       1,     3,     2,     1,     3,     2,     0,     1,     0,     1,
+       1,     1,     1,     1,     1,     1,     2,     2,     1,     1,
+       1,     1,     1,     1,     0,     1,     1,     2,     1,     2,
+       2,     1,     1,     1,     1,     2,     3,     1,     2,     4,
+       1,     1,     2,     1,     2,     1,     3,     2,     6,     2,
+       6,     2,     5,     2,     0,     2,     3,     3,     2,     1,
+       2,     3,     2,     3,     6,     6,     0,     2,     2,     1,
+       1,     3,     2,     0,     0,     7,     8,     0,     0,    13,
+       1,     1,     3,     3,     0,     2,     0,     9,     2,     2,
+       3,     2,     2,     6,     1,     1,     1,     1,     1,     0,
+       2,     2,     3,     2,     3,     0,     1,     2,     2,     2,
+       3,     2,     1,     1,     3,     2,     4,     3,     2,     1,
+       3,     2,     0,     1,     3,     2,     1,     3,     4,     3,
+       2,     1,     3,     2,     0,     1,     1,     3,     2,     1,
+       3,     4,     1,     3,     0,     2,     2,     1,     3,     1,
+       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       5,     1,     1,     1,     2,     1,     2,     1,     2,     4,
+       1,     1,     2,     1,     5,     5,    10,     1,     3,     1,
+       0,     2,     0,     2,     4,     6,     0,     3,     1,     3,
+       4,     1,     1,     1,     1,     3,     1,     1,     1,     1
 };
 
 
@@ -3350,7 +3359,7 @@
   switch (yyn)
     {
   case 2: /* input: gbl_statements m_acf  */
-#line 348 "tools/widl/parser.y"
+#line 349 "tools/widl/parser.y"
                                                 { (yyvsp[-1].stmt_list) = append_parameterized_type_stmts((yyvsp[-1].stmt_list));
 						  check_statements((yyvsp[-1].stmt_list), FALSE);
 						  check_all_user_types((yyvsp[-1].stmt_list));
@@ -3364,311 +3373,323 @@
 						  write_dlldata((yyvsp[-1].stmt_list));
 						  write_local_stubs((yyvsp[-1].stmt_list));
 						}
-#line 3368 "tools/widl/parser.tab.c"
+#line 3377 "tools/widl/parser.tab.c"
     break;
 
   case 5: /* decl_statements: %empty  */
-#line 365 "tools/widl/parser.y"
+#line 366 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = NULL; }
-#line 3374 "tools/widl/parser.tab.c"
+#line 3383 "tools/widl/parser.tab.c"
     break;
 
   case 6: /* decl_statements: decl_statements tINTERFACE qualified_type '<' parameterized_type_args '>' ';'  */
-#line 367 "tools/widl/parser.y"
+#line 368 "tools/widl/parser.y"
                                                 { parameterized_type_stmts = append_statement(parameterized_type_stmts, make_statement_parameterized_type((yyvsp[-4].type), (yyvsp[-2].typeref_list)));
 						  (yyval.stmt_list) = append_statement((yyvsp[-6].stmt_list), make_statement_reference(type_parameterized_type_specialize_declare((yyvsp[-4].type), (yyvsp[-2].typeref_list))));
 						}
-#line 3382 "tools/widl/parser.tab.c"
+#line 3391 "tools/widl/parser.tab.c"
     break;
 
   case 7: /* decl_block: tDECLARE '{' decl_statements '}'  */
-#line 372 "tools/widl/parser.y"
+#line 373 "tools/widl/parser.y"
                                              { (yyval.stmt_list) = (yyvsp[-1].stmt_list); }
-#line 3388 "tools/widl/parser.tab.c"
+#line 3397 "tools/widl/parser.tab.c"
     break;
 
   case 8: /* imp_decl_statements: %empty  */
-#line 374 "tools/widl/parser.y"
+#line 375 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = NULL; }
-#line 3394 "tools/widl/parser.tab.c"
+#line 3403 "tools/widl/parser.tab.c"
     break;
 
   case 9: /* imp_decl_statements: imp_decl_statements tINTERFACE qualified_type '<' parameterized_type_args '>' ';'  */
-#line 376 "tools/widl/parser.y"
+#line 377 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-6].stmt_list), make_statement_reference(type_parameterized_type_specialize_declare((yyvsp[-4].type), (yyvsp[-2].typeref_list)))); }
-#line 3400 "tools/widl/parser.tab.c"
+#line 3409 "tools/widl/parser.tab.c"
     break;
 
   case 10: /* imp_decl_block: tDECLARE '{' imp_decl_statements '}'  */
-#line 379 "tools/widl/parser.y"
+#line 380 "tools/widl/parser.y"
                                                      { (yyval.stmt_list) = (yyvsp[-1].stmt_list); }
-#line 3406 "tools/widl/parser.tab.c"
+#line 3415 "tools/widl/parser.tab.c"
     break;
 
   case 11: /* gbl_statements: %empty  */
-#line 381 "tools/widl/parser.y"
+#line 382 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = NULL; }
-#line 3412 "tools/widl/parser.tab.c"
+#line 3421 "tools/widl/parser.tab.c"
     break;
 
   case 12: /* $@1: %empty  */
-#line 382 "tools/widl/parser.y"
+#line 383 "tools/widl/parser.y"
                                           { push_namespace((yyvsp[-1].str)); }
-#line 3418 "tools/widl/parser.tab.c"
+#line 3427 "tools/widl/parser.tab.c"
     break;
 
   case 13: /* gbl_statements: gbl_statements namespacedef '{' $@1 gbl_statements '}'  */
-#line 383 "tools/widl/parser.y"
+#line 384 "tools/widl/parser.y"
                                                 { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
-#line 3424 "tools/widl/parser.tab.c"
+#line 3433 "tools/widl/parser.tab.c"
     break;
 
   case 14: /* gbl_statements: gbl_statements interface ';'  */
-#line 384 "tools/widl/parser.y"
+#line 385 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_reference((yyvsp[-1].type))); }
-#line 3430 "tools/widl/parser.tab.c"
+#line 3439 "tools/widl/parser.tab.c"
     break;
 
   case 15: /* gbl_statements: gbl_statements dispinterface ';'  */
-#line 385 "tools/widl/parser.y"
+#line 386 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_reference((yyvsp[-1].type))); }
-#line 3436 "tools/widl/parser.tab.c"
+#line 3445 "tools/widl/parser.tab.c"
     break;
 
   case 16: /* gbl_statements: gbl_statements interfacedef  */
-#line 386 "tools/widl/parser.y"
+#line 387 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
-#line 3442 "tools/widl/parser.tab.c"
+#line 3451 "tools/widl/parser.tab.c"
     break;
 
-  case 17: /* gbl_statements: gbl_statements coclass ';'  */
-#line 387 "tools/widl/parser.y"
+  case 17: /* gbl_statements: gbl_statements delegatedef  */
+#line 388 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
+#line 3457 "tools/widl/parser.tab.c"
+    break;
+
+  case 18: /* gbl_statements: gbl_statements coclass ';'  */
+#line 389 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list);
 						  reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0);
 						}
-#line 3450 "tools/widl/parser.tab.c"
+#line 3465 "tools/widl/parser.tab.c"
     break;
 
-  case 18: /* gbl_statements: gbl_statements coclassdef  */
-#line 390 "tools/widl/parser.y"
+  case 19: /* gbl_statements: gbl_statements coclassdef  */
+#line 392 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
 						  reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0);
 						}
-#line 3458 "tools/widl/parser.tab.c"
+#line 3473 "tools/widl/parser.tab.c"
     break;
 
-  case 19: /* gbl_statements: gbl_statements apicontract ';'  */
-#line 393 "tools/widl/parser.y"
+  case 20: /* gbl_statements: gbl_statements apicontract ';'  */
+#line 395 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3464 "tools/widl/parser.tab.c"
+#line 3479 "tools/widl/parser.tab.c"
     break;
 
-  case 20: /* gbl_statements: gbl_statements apicontract_def  */
-#line 394 "tools/widl/parser.y"
+  case 21: /* gbl_statements: gbl_statements apicontract_def  */
+#line 396 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
 						  reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0); }
-#line 3471 "tools/widl/parser.tab.c"
+#line 3486 "tools/widl/parser.tab.c"
     break;
 
-  case 21: /* gbl_statements: gbl_statements runtimeclass ';'  */
-#line 396 "tools/widl/parser.y"
+  case 22: /* gbl_statements: gbl_statements runtimeclass ';'  */
+#line 398 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3477 "tools/widl/parser.tab.c"
+#line 3492 "tools/widl/parser.tab.c"
     break;
 
-  case 22: /* gbl_statements: gbl_statements runtimeclass_def  */
-#line 397 "tools/widl/parser.y"
+  case 23: /* gbl_statements: gbl_statements runtimeclass_def  */
+#line 399 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
 	                                          reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0); }
-#line 3484 "tools/widl/parser.tab.c"
+#line 3499 "tools/widl/parser.tab.c"
     break;
 
-  case 23: /* gbl_statements: gbl_statements moduledef  */
-#line 399 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
-#line 3490 "tools/widl/parser.tab.c"
-    break;
-
-  case 24: /* gbl_statements: gbl_statements librarydef  */
-#line 400 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
-#line 3496 "tools/widl/parser.tab.c"
-    break;
-
-  case 25: /* gbl_statements: gbl_statements statement  */
+  case 24: /* gbl_statements: gbl_statements moduledef  */
 #line 401 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
-#line 3502 "tools/widl/parser.tab.c"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
+#line 3505 "tools/widl/parser.tab.c"
     break;
 
-  case 26: /* gbl_statements: gbl_statements decl_block  */
+  case 25: /* gbl_statements: gbl_statements librarydef  */
 #line 402 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
+#line 3511 "tools/widl/parser.tab.c"
+    break;
+
+  case 26: /* gbl_statements: gbl_statements statement  */
+#line 403 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
+#line 3517 "tools/widl/parser.tab.c"
+    break;
+
+  case 27: /* gbl_statements: gbl_statements decl_block  */
+#line 404 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statements((yyvsp[-1].stmt_list), (yyvsp[0].stmt_list)); }
-#line 3508 "tools/widl/parser.tab.c"
+#line 3523 "tools/widl/parser.tab.c"
     break;
 
-  case 27: /* imp_statements: %empty  */
-#line 405 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = NULL; }
-#line 3514 "tools/widl/parser.tab.c"
-    break;
-
-  case 28: /* imp_statements: imp_statements interface ';'  */
-#line 406 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_reference((yyvsp[-1].type))); }
-#line 3520 "tools/widl/parser.tab.c"
-    break;
-
-  case 29: /* imp_statements: imp_statements dispinterface ';'  */
+  case 28: /* imp_statements: %empty  */
 #line 407 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_reference((yyvsp[-1].type))); }
-#line 3526 "tools/widl/parser.tab.c"
+                                                { (yyval.stmt_list) = NULL; }
+#line 3529 "tools/widl/parser.tab.c"
     break;
 
-  case 30: /* $@2: %empty  */
+  case 29: /* imp_statements: imp_statements interface ';'  */
 #line 408 "tools/widl/parser.y"
-                                          { push_namespace((yyvsp[-1].str)); }
-#line 3532 "tools/widl/parser.tab.c"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_reference((yyvsp[-1].type))); }
+#line 3535 "tools/widl/parser.tab.c"
     break;
 
-  case 31: /* imp_statements: imp_statements namespacedef '{' $@2 imp_statements '}'  */
+  case 30: /* imp_statements: imp_statements dispinterface ';'  */
 #line 409 "tools/widl/parser.y"
-                                                { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
-#line 3538 "tools/widl/parser.tab.c"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_reference((yyvsp[-1].type))); }
+#line 3541 "tools/widl/parser.tab.c"
     break;
 
-  case 32: /* imp_statements: imp_statements interfacedef  */
+  case 31: /* $@2: %empty  */
 #line 410 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
-#line 3544 "tools/widl/parser.tab.c"
+                                          { push_namespace((yyvsp[-1].str)); }
+#line 3547 "tools/widl/parser.tab.c"
     break;
 
-  case 33: /* imp_statements: imp_statements coclass ';'  */
+  case 32: /* imp_statements: imp_statements namespacedef '{' $@2 imp_statements '}'  */
 #line 411 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3550 "tools/widl/parser.tab.c"
+                                                { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
+#line 3553 "tools/widl/parser.tab.c"
     break;
 
-  case 34: /* imp_statements: imp_statements coclassdef  */
+  case 33: /* imp_statements: imp_statements interfacedef  */
 #line 412 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
-						  reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0);
-						}
-#line 3558 "tools/widl/parser.tab.c"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
+#line 3559 "tools/widl/parser.tab.c"
     break;
 
-  case 35: /* imp_statements: imp_statements apicontract ';'  */
-#line 415 "tools/widl/parser.y"
+  case 34: /* imp_statements: imp_statements delegatedef  */
+#line 413 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
+#line 3565 "tools/widl/parser.tab.c"
+    break;
+
+  case 35: /* imp_statements: imp_statements coclass ';'  */
+#line 414 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3564 "tools/widl/parser.tab.c"
-    break;
-
-  case 36: /* imp_statements: imp_statements apicontract_def  */
-#line 416 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
-						  reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0); }
 #line 3571 "tools/widl/parser.tab.c"
     break;
 
-  case 37: /* imp_statements: imp_statements runtimeclass ';'  */
+  case 36: /* imp_statements: imp_statements coclassdef  */
+#line 415 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
+						  reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0);
+						}
+#line 3579 "tools/widl/parser.tab.c"
+    break;
+
+  case 37: /* imp_statements: imp_statements apicontract ';'  */
 #line 418 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3577 "tools/widl/parser.tab.c"
+#line 3585 "tools/widl/parser.tab.c"
     break;
 
-  case 38: /* imp_statements: imp_statements runtimeclass_def  */
+  case 38: /* imp_statements: imp_statements apicontract_def  */
 #line 419 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
-	                                          reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0); }
-#line 3584 "tools/widl/parser.tab.c"
+						  reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0); }
+#line 3592 "tools/widl/parser.tab.c"
     break;
 
-  case 39: /* imp_statements: imp_statements moduledef  */
+  case 39: /* imp_statements: imp_statements runtimeclass ';'  */
 #line 421 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
-#line 3590 "tools/widl/parser.tab.c"
+                                                { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
+#line 3598 "tools/widl/parser.tab.c"
     break;
 
-  case 40: /* imp_statements: imp_statements statement  */
+  case 40: /* imp_statements: imp_statements runtimeclass_def  */
 #line 422 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
-#line 3596 "tools/widl/parser.tab.c"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
+	                                          reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0); }
+#line 3605 "tools/widl/parser.tab.c"
     break;
 
-  case 41: /* imp_statements: imp_statements importlib  */
-#line 423 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_importlib((yyvsp[0].str))); }
-#line 3602 "tools/widl/parser.tab.c"
-    break;
-
-  case 42: /* imp_statements: imp_statements librarydef  */
+  case 41: /* imp_statements: imp_statements moduledef  */
 #line 424 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
-#line 3608 "tools/widl/parser.tab.c"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
+#line 3611 "tools/widl/parser.tab.c"
     break;
 
-  case 43: /* imp_statements: imp_statements imp_decl_block  */
+  case 42: /* imp_statements: imp_statements statement  */
 #line 425 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statements((yyvsp[-1].stmt_list), (yyvsp[0].stmt_list)); }
-#line 3614 "tools/widl/parser.tab.c"
-    break;
-
-  case 44: /* int_statements: %empty  */
-#line 428 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = NULL; }
-#line 3620 "tools/widl/parser.tab.c"
-    break;
-
-  case 45: /* int_statements: int_statements statement  */
-#line 429 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
-#line 3626 "tools/widl/parser.tab.c"
+#line 3617 "tools/widl/parser.tab.c"
     break;
 
-  case 48: /* statement: cppquote  */
-#line 437 "tools/widl/parser.y"
-                                                { (yyval.statement) = make_statement_cppquote((yyvsp[0].str)); }
-#line 3632 "tools/widl/parser.tab.c"
+  case 43: /* imp_statements: imp_statements importlib  */
+#line 426 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_importlib((yyvsp[0].str))); }
+#line 3623 "tools/widl/parser.tab.c"
     break;
 
-  case 49: /* statement: typedecl ';'  */
-#line 438 "tools/widl/parser.y"
-                                                { (yyval.statement) = make_statement_type_decl((yyvsp[-1].type)); }
-#line 3638 "tools/widl/parser.tab.c"
+  case 44: /* imp_statements: imp_statements librarydef  */
+#line 427 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
+#line 3629 "tools/widl/parser.tab.c"
     break;
 
-  case 50: /* statement: declaration ';'  */
-#line 439 "tools/widl/parser.y"
-                                                { (yyval.statement) = make_statement_declaration((yyvsp[-1].var)); }
-#line 3644 "tools/widl/parser.tab.c"
+  case 45: /* imp_statements: imp_statements imp_decl_block  */
+#line 428 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statements((yyvsp[-1].stmt_list), (yyvsp[0].stmt_list)); }
+#line 3635 "tools/widl/parser.tab.c"
     break;
 
-  case 51: /* statement: import  */
+  case 46: /* int_statements: %empty  */
+#line 431 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = NULL; }
+#line 3641 "tools/widl/parser.tab.c"
+    break;
+
+  case 47: /* int_statements: int_statements statement  */
+#line 432 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
+#line 3647 "tools/widl/parser.tab.c"
+    break;
+
+  case 50: /* statement: cppquote  */
 #line 440 "tools/widl/parser.y"
-                                                { (yyval.statement) = make_statement_import((yyvsp[0].str)); }
-#line 3650 "tools/widl/parser.tab.c"
+                                                { (yyval.statement) = make_statement_cppquote((yyvsp[0].str)); }
+#line 3653 "tools/widl/parser.tab.c"
     break;
 
-  case 52: /* statement: typedef ';'  */
+  case 51: /* statement: typedecl ';'  */
 #line 441 "tools/widl/parser.y"
-                                                { (yyval.statement) = (yyvsp[-1].statement); }
-#line 3656 "tools/widl/parser.tab.c"
+                                                { (yyval.statement) = make_statement_type_decl((yyvsp[-1].type)); }
+#line 3659 "tools/widl/parser.tab.c"
     break;
 
-  case 53: /* statement: aPRAGMA  */
+  case 52: /* statement: declaration ';'  */
 #line 442 "tools/widl/parser.y"
-                                                { (yyval.statement) = make_statement_pragma((yyvsp[0].str)); }
-#line 3662 "tools/widl/parser.tab.c"
+                                                { (yyval.statement) = make_statement_declaration((yyvsp[-1].var)); }
+#line 3665 "tools/widl/parser.tab.c"
     break;
 
-  case 54: /* statement: pragma_warning  */
+  case 53: /* statement: import  */
 #line 443 "tools/widl/parser.y"
-                         { (yyval.statement) = NULL; }
-#line 3668 "tools/widl/parser.tab.c"
+                                                { (yyval.statement) = make_statement_import((yyvsp[0].str)); }
+#line 3671 "tools/widl/parser.tab.c"
     break;
 
-  case 55: /* pragma_warning: tPRAGMA_WARNING '(' aIDENTIFIER ':' warnings ')'  */
-#line 447 "tools/widl/parser.y"
+  case 54: /* statement: typedef ';'  */
+#line 444 "tools/widl/parser.y"
+                                                { (yyval.statement) = (yyvsp[-1].statement); }
+#line 3677 "tools/widl/parser.tab.c"
+    break;
+
+  case 55: /* statement: aPRAGMA  */
+#line 445 "tools/widl/parser.y"
+                                                { (yyval.statement) = make_statement_pragma((yyvsp[0].str)); }
+#line 3683 "tools/widl/parser.tab.c"
+    break;
+
+  case 56: /* statement: pragma_warning  */
+#line 446 "tools/widl/parser.y"
+                         { (yyval.statement) = NULL; }
+#line 3689 "tools/widl/parser.tab.c"
+    break;
+
+  case 57: /* pragma_warning: tPRAGMA_WARNING '(' aIDENTIFIER ':' warnings ')'  */
+#line 450 "tools/widl/parser.y"
                   {
                       int result;
                       (yyval.statement) = NULL;
@@ -3676,1023 +3697,1023 @@
                       if(!result)
                           error_loc("expected \"disable\", \"enable\" or \"default\"\n");
                   }
-#line 3680 "tools/widl/parser.tab.c"
+#line 3701 "tools/widl/parser.tab.c"
     break;
 
-  case 56: /* pragma_warning: tPRAGMA_WARNING '(' tDEFAULT ':' warnings ')'  */
-#line 455 "tools/widl/parser.y"
+  case 58: /* pragma_warning: tPRAGMA_WARNING '(' tDEFAULT ':' warnings ')'  */
+#line 458 "tools/widl/parser.y"
                   {
                       (yyval.statement) = NULL;
                       do_warning("default", (yyvsp[-1].warning_list));
                   }
-#line 3689 "tools/widl/parser.tab.c"
+#line 3710 "tools/widl/parser.tab.c"
     break;
 
-  case 57: /* warnings: aNUM  */
-#line 462 "tools/widl/parser.y"
+  case 59: /* warnings: aNUM  */
+#line 465 "tools/widl/parser.y"
                { (yyval.warning_list) = append_warning(NULL, (yyvsp[0].num)); }
-#line 3695 "tools/widl/parser.tab.c"
+#line 3716 "tools/widl/parser.tab.c"
     break;
 
-  case 58: /* warnings: warnings aNUM  */
-#line 463 "tools/widl/parser.y"
+  case 60: /* warnings: warnings aNUM  */
+#line 466 "tools/widl/parser.y"
                         { (yyval.warning_list) = append_warning((yyvsp[-1].warning_list), (yyvsp[0].num)); }
-#line 3701 "tools/widl/parser.tab.c"
+#line 3722 "tools/widl/parser.tab.c"
     break;
 
-  case 60: /* typedecl: tENUM aIDENTIFIER  */
-#line 468 "tools/widl/parser.y"
+  case 62: /* typedecl: tENUM aIDENTIFIER  */
+#line 471 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 3707 "tools/widl/parser.tab.c"
+#line 3728 "tools/widl/parser.tab.c"
     break;
 
-  case 62: /* typedecl: tSTRUCT aIDENTIFIER  */
-#line 470 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 3713 "tools/widl/parser.tab.c"
-    break;
-
-  case 64: /* typedecl: tUNION aIDENTIFIER  */
-#line 472 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
-#line 3719 "tools/widl/parser.tab.c"
-    break;
-
-  case 65: /* typedecl: attributes enumdef  */
+  case 64: /* typedecl: tSTRUCT aIDENTIFIER  */
 #line 473 "tools/widl/parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_enum_attrs((yyvsp[-1].attr_list)); }
-#line 3725 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
+#line 3734 "tools/widl/parser.tab.c"
     break;
 
-  case 66: /* typedecl: attributes structdef  */
-#line 474 "tools/widl/parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_struct_attrs((yyvsp[-1].attr_list)); }
-#line 3731 "tools/widl/parser.tab.c"
-    break;
-
-  case 67: /* typedecl: attributes uniondef  */
+  case 66: /* typedecl: tUNION aIDENTIFIER  */
 #line 475 "tools/widl/parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_union_attrs((yyvsp[-1].attr_list)); }
-#line 3737 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
+#line 3740 "tools/widl/parser.tab.c"
     break;
 
-  case 68: /* cppquote: tCPPQUOTE '(' aSTRING ')'  */
+  case 67: /* typedecl: attributes enumdef  */
+#line 476 "tools/widl/parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_enum_attrs((yyvsp[-1].attr_list)); }
+#line 3746 "tools/widl/parser.tab.c"
+    break;
+
+  case 68: /* typedecl: attributes structdef  */
+#line 477 "tools/widl/parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_struct_attrs((yyvsp[-1].attr_list)); }
+#line 3752 "tools/widl/parser.tab.c"
+    break;
+
+  case 69: /* typedecl: attributes uniondef  */
 #line 478 "tools/widl/parser.y"
-                                                { (yyval.str) = (yyvsp[-1].str); }
-#line 3743 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_union_attrs((yyvsp[-1].attr_list)); }
+#line 3758 "tools/widl/parser.tab.c"
     break;
 
-  case 69: /* import_start: tIMPORT aSTRING ';'  */
-#line 480 "tools/widl/parser.y"
+  case 70: /* cppquote: tCPPQUOTE '(' aSTRING ')'  */
+#line 481 "tools/widl/parser.y"
+                                                { (yyval.str) = (yyvsp[-1].str); }
+#line 3764 "tools/widl/parser.tab.c"
+    break;
+
+  case 71: /* import_start: tIMPORT aSTRING ';'  */
+#line 483 "tools/widl/parser.y"
                                                 { assert(yychar == YYEMPTY);
 						  (yyval.import) = xmalloc(sizeof(struct _import_t));
 						  (yyval.import)->name = (yyvsp[-1].str);
 						  (yyval.import)->import_performed = do_import((yyvsp[-1].str));
 						  if (!(yyval.import)->import_performed) yychar = aEOF;
 						}
-#line 3754 "tools/widl/parser.tab.c"
+#line 3775 "tools/widl/parser.tab.c"
     break;
 
-  case 70: /* import: import_start imp_statements aEOF  */
-#line 488 "tools/widl/parser.y"
+  case 72: /* import: import_start imp_statements aEOF  */
+#line 491 "tools/widl/parser.y"
                                                 { (yyval.str) = (yyvsp[-2].import)->name;
 						  if ((yyvsp[-2].import)->import_performed) pop_import();
 						  free((yyvsp[-2].import));
 						}
-#line 3763 "tools/widl/parser.tab.c"
+#line 3784 "tools/widl/parser.tab.c"
     break;
 
-  case 71: /* importlib: tIMPORTLIB '(' aSTRING ')' semicolon_opt  */
-#line 495 "tools/widl/parser.y"
-                                                { (yyval.str) = (yyvsp[-2].str); if(!parse_only) add_importlib((yyvsp[-2].str), current_typelib); }
-#line 3769 "tools/widl/parser.tab.c"
-    break;
-
-  case 72: /* libraryhdr: tLIBRARY typename  */
+  case 73: /* importlib: tIMPORTLIB '(' aSTRING ')' semicolon_opt  */
 #line 498 "tools/widl/parser.y"
-                                                { (yyval.str) = (yyvsp[0].str); }
-#line 3775 "tools/widl/parser.tab.c"
+                                                { (yyval.str) = (yyvsp[-2].str); if(!parse_only) add_importlib((yyvsp[-2].str), current_typelib); }
+#line 3790 "tools/widl/parser.tab.c"
     break;
 
-  case 73: /* library_start: attributes libraryhdr '{'  */
-#line 500 "tools/widl/parser.y"
+  case 74: /* libraryhdr: tLIBRARY typename  */
+#line 501 "tools/widl/parser.y"
+                                                { (yyval.str) = (yyvsp[0].str); }
+#line 3796 "tools/widl/parser.tab.c"
+    break;
+
+  case 75: /* library_start: attributes libraryhdr '{'  */
+#line 503 "tools/widl/parser.y"
                                                 { (yyval.typelib) = make_library((yyvsp[-1].str), check_library_attrs((yyvsp[-1].str), (yyvsp[-2].attr_list)));
 						  if (!parse_only && do_typelib) current_typelib = (yyval.typelib);
 						}
-#line 3783 "tools/widl/parser.tab.c"
+#line 3804 "tools/widl/parser.tab.c"
     break;
 
-  case 74: /* librarydef: library_start imp_statements '}' semicolon_opt  */
-#line 505 "tools/widl/parser.y"
-                                                { (yyval.typelib) = (yyvsp[-3].typelib); (yyval.typelib)->stmts = (yyvsp[-2].stmt_list); }
-#line 3789 "tools/widl/parser.tab.c"
-    break;
-
-  case 75: /* m_args: %empty  */
+  case 76: /* librarydef: library_start imp_statements '}' semicolon_opt  */
 #line 508 "tools/widl/parser.y"
+                                                { (yyval.typelib) = (yyvsp[-3].typelib); (yyval.typelib)->stmts = (yyvsp[-2].stmt_list); }
+#line 3810 "tools/widl/parser.tab.c"
+    break;
+
+  case 77: /* m_args: %empty  */
+#line 511 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 3795 "tools/widl/parser.tab.c"
+#line 3816 "tools/widl/parser.tab.c"
     break;
 
-  case 77: /* arg_list: arg  */
-#line 512 "tools/widl/parser.y"
+  case 79: /* arg_list: arg  */
+#line 515 "tools/widl/parser.y"
                                                 { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( NULL, (yyvsp[0].var) ); }
-#line 3801 "tools/widl/parser.tab.c"
+#line 3822 "tools/widl/parser.tab.c"
     break;
 
-  case 78: /* arg_list: arg_list ',' arg  */
-#line 513 "tools/widl/parser.y"
+  case 80: /* arg_list: arg_list ',' arg  */
+#line 516 "tools/widl/parser.y"
                                                 { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) ); }
-#line 3807 "tools/widl/parser.tab.c"
+#line 3828 "tools/widl/parser.tab.c"
     break;
 
-  case 80: /* args: arg_list ',' ELLIPSIS  */
-#line 517 "tools/widl/parser.y"
+  case 82: /* args: arg_list ',' ELLIPSIS  */
+#line 520 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-2].var_list), make_var(strdup("...")) ); }
-#line 3813 "tools/widl/parser.tab.c"
+#line 3834 "tools/widl/parser.tab.c"
     break;
 
-  case 81: /* arg: attributes decl_spec m_any_declarator  */
-#line 521 "tools/widl/parser.y"
+  case 83: /* arg: attributes decl_spec m_any_declarator  */
+#line 524 "tools/widl/parser.y"
                                                 { if ((yyvsp[-1].declspec)->stgclass != STG_NONE && (yyvsp[-1].declspec)->stgclass != STG_REGISTER)
 						    error_loc("invalid storage class for function parameter\n");
 						  (yyval.var) = declare_var((yyvsp[-2].attr_list), (yyvsp[-1].declspec), (yyvsp[0].declarator), TRUE);
 						  free((yyvsp[-1].declspec)); free((yyvsp[0].declarator));
 						}
-#line 3823 "tools/widl/parser.tab.c"
+#line 3844 "tools/widl/parser.tab.c"
     break;
 
-  case 82: /* arg: decl_spec m_any_declarator  */
-#line 526 "tools/widl/parser.y"
+  case 84: /* arg: decl_spec m_any_declarator  */
+#line 529 "tools/widl/parser.y"
                                                 { if ((yyvsp[-1].declspec)->stgclass != STG_NONE && (yyvsp[-1].declspec)->stgclass != STG_REGISTER)
 						    error_loc("invalid storage class for function parameter\n");
 						  (yyval.var) = declare_var(NULL, (yyvsp[-1].declspec), (yyvsp[0].declarator), TRUE);
 						  free((yyvsp[-1].declspec)); free((yyvsp[0].declarator));
 						}
-#line 3833 "tools/widl/parser.tab.c"
+#line 3854 "tools/widl/parser.tab.c"
     break;
 
-  case 83: /* array: '[' expr ']'  */
-#line 533 "tools/widl/parser.y"
+  case 85: /* array: '[' expr ']'  */
+#line 536 "tools/widl/parser.y"
                                                 { (yyval.expr) = (yyvsp[-1].expr);
 						  if (!(yyval.expr)->is_const || (yyval.expr)->cval <= 0)
 						      error_loc("array dimension is not a positive integer constant\n");
 						}
-#line 3842 "tools/widl/parser.tab.c"
+#line 3863 "tools/widl/parser.tab.c"
     break;
 
-  case 84: /* array: '[' '*' ']'  */
-#line 537 "tools/widl/parser.y"
+  case 86: /* array: '[' '*' ']'  */
+#line 540 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr(EXPR_VOID); }
-#line 3848 "tools/widl/parser.tab.c"
+#line 3869 "tools/widl/parser.tab.c"
     break;
 
-  case 85: /* array: '[' ']'  */
-#line 538 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr(EXPR_VOID); }
-#line 3854 "tools/widl/parser.tab.c"
-    break;
-
-  case 86: /* m_attributes: %empty  */
+  case 87: /* array: '[' ']'  */
 #line 541 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr(EXPR_VOID); }
+#line 3875 "tools/widl/parser.tab.c"
+    break;
+
+  case 88: /* m_attributes: %empty  */
+#line 544 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = NULL; }
-#line 3860 "tools/widl/parser.tab.c"
+#line 3881 "tools/widl/parser.tab.c"
     break;
 
-  case 88: /* attributes: '[' attrib_list ']'  */
-#line 546 "tools/widl/parser.y"
-                                                { (yyval.attr_list) = (yyvsp[-1].attr_list); }
-#line 3866 "tools/widl/parser.tab.c"
-    break;
-
-  case 89: /* attrib_list: attribute  */
+  case 90: /* attributes: '[' attrib_list ']'  */
 #line 549 "tools/widl/parser.y"
+                                                { (yyval.attr_list) = (yyvsp[-1].attr_list); }
+#line 3887 "tools/widl/parser.tab.c"
+    break;
+
+  case 91: /* attrib_list: attribute  */
+#line 552 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = append_attr( NULL, (yyvsp[0].attr) ); }
-#line 3872 "tools/widl/parser.tab.c"
+#line 3893 "tools/widl/parser.tab.c"
     break;
 
-  case 90: /* attrib_list: attrib_list ',' attribute  */
-#line 550 "tools/widl/parser.y"
+  case 92: /* attrib_list: attrib_list ',' attribute  */
+#line 553 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = append_attr( (yyvsp[-2].attr_list), (yyvsp[0].attr) ); }
-#line 3878 "tools/widl/parser.tab.c"
+#line 3899 "tools/widl/parser.tab.c"
     break;
 
-  case 91: /* attrib_list: attrib_list ']' '[' attribute  */
-#line 551 "tools/widl/parser.y"
-                                                { (yyval.attr_list) = append_attr( (yyvsp[-3].attr_list), (yyvsp[0].attr) ); }
-#line 3884 "tools/widl/parser.tab.c"
-    break;
-
-  case 92: /* str_list: aSTRING  */
+  case 93: /* attrib_list: attrib_list ']' '[' attribute  */
 #line 554 "tools/widl/parser.y"
+                                                { (yyval.attr_list) = append_attr( (yyvsp[-3].attr_list), (yyvsp[0].attr) ); }
+#line 3905 "tools/widl/parser.tab.c"
+    break;
+
+  case 94: /* str_list: aSTRING  */
+#line 557 "tools/widl/parser.y"
                                                 { (yyval.str_list) = append_str( NULL, (yyvsp[0].str) ); }
-#line 3890 "tools/widl/parser.tab.c"
+#line 3911 "tools/widl/parser.tab.c"
     break;
 
-  case 93: /* str_list: str_list ',' aSTRING  */
-#line 555 "tools/widl/parser.y"
+  case 95: /* str_list: str_list ',' aSTRING  */
+#line 558 "tools/widl/parser.y"
                                                 { (yyval.str_list) = append_str( (yyvsp[-2].str_list), (yyvsp[0].str) ); }
-#line 3896 "tools/widl/parser.tab.c"
+#line 3917 "tools/widl/parser.tab.c"
     break;
 
-  case 94: /* marshaling_behavior: tAGILE  */
-#line 559 "tools/widl/parser.y"
+  case 96: /* marshaling_behavior: tAGILE  */
+#line 562 "tools/widl/parser.y"
                                                 { (yyval.num) = MARSHALING_AGILE; }
-#line 3902 "tools/widl/parser.tab.c"
+#line 3923 "tools/widl/parser.tab.c"
     break;
 
-  case 95: /* marshaling_behavior: tNONE  */
-#line 560 "tools/widl/parser.y"
+  case 97: /* marshaling_behavior: tNONE  */
+#line 563 "tools/widl/parser.y"
                                                 { (yyval.num) = MARSHALING_NONE; }
-#line 3908 "tools/widl/parser.tab.c"
+#line 3929 "tools/widl/parser.tab.c"
     break;
 
-  case 96: /* marshaling_behavior: tSTANDARD  */
-#line 561 "tools/widl/parser.y"
+  case 98: /* marshaling_behavior: tSTANDARD  */
+#line 564 "tools/widl/parser.y"
                                                 { (yyval.num) = MARSHALING_STANDARD; }
-#line 3914 "tools/widl/parser.tab.c"
+#line 3935 "tools/widl/parser.tab.c"
     break;
 
-  case 97: /* contract_ver: aNUM  */
-#line 565 "tools/widl/parser.y"
+  case 99: /* contract_ver: aNUM  */
+#line 568 "tools/widl/parser.y"
                                                 { (yyval.num) = MAKEVERSION(0, (yyvsp[0].num)); }
-#line 3920 "tools/widl/parser.tab.c"
+#line 3941 "tools/widl/parser.tab.c"
     break;
 
-  case 98: /* contract_ver: aNUM '.' aNUM  */
-#line 566 "tools/widl/parser.y"
-                                                { (yyval.num) = MAKEVERSION((yyvsp[0].num), (yyvsp[-2].num)); }
-#line 3926 "tools/widl/parser.tab.c"
-    break;
-
-  case 99: /* contract_req: decl_spec ',' contract_ver  */
+  case 100: /* contract_ver: aNUM '.' aNUM  */
 #line 569 "tools/widl/parser.y"
+                                                { (yyval.num) = MAKEVERSION((yyvsp[0].num), (yyvsp[-2].num)); }
+#line 3947 "tools/widl/parser.tab.c"
+    break;
+
+  case 101: /* contract_req: decl_spec ',' contract_ver  */
+#line 572 "tools/widl/parser.y"
                                                 { if ((yyvsp[-2].declspec)->type->type_type != TYPE_APICONTRACT)
 						      error_loc("type %s is not an apicontract\n", (yyvsp[-2].declspec)->type->name);
 						  (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num));
 						  (yyval.expr) = make_exprt(EXPR_GTREQL, declare_var(NULL, (yyvsp[-2].declspec), make_declarator(NULL), 0), (yyval.expr));
 						}
-#line 3936 "tools/widl/parser.tab.c"
+#line 3957 "tools/widl/parser.tab.c"
     break;
 
-  case 100: /* static_attr: decl_spec ',' contract_req  */
-#line 575 "tools/widl/parser.y"
+  case 102: /* static_attr: decl_spec ',' contract_req  */
+#line 578 "tools/widl/parser.y"
                                                 { if ((yyvsp[-2].declspec)->type->type_type != TYPE_INTERFACE)
 						      error_loc("type %s is not an interface\n", (yyvsp[-2].declspec)->type->name);
 						  (yyval.expr) = make_exprt(EXPR_MEMBER, declare_var(NULL, (yyvsp[-2].declspec), make_declarator(NULL), 0), (yyvsp[0].expr));
 						}
-#line 3945 "tools/widl/parser.tab.c"
+#line 3966 "tools/widl/parser.tab.c"
     break;
 
-  case 101: /* attribute: %empty  */
-#line 580 "tools/widl/parser.y"
-                                                { (yyval.attr) = NULL; }
-#line 3951 "tools/widl/parser.tab.c"
-    break;
-
-  case 102: /* attribute: tACTIVATABLE '(' contract_req ')'  */
-#line 581 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_ACTIVATABLE, (yyvsp[-1].expr)); }
-#line 3957 "tools/widl/parser.tab.c"
-    break;
-
-  case 103: /* attribute: tAGGREGATABLE  */
-#line 582 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_AGGREGATABLE); }
-#line 3963 "tools/widl/parser.tab.c"
-    break;
-
-  case 104: /* attribute: tANNOTATION '(' aSTRING ')'  */
+  case 103: /* attribute: %empty  */
 #line 583 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_ANNOTATION, (yyvsp[-1].str)); }
-#line 3969 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = NULL; }
+#line 3972 "tools/widl/parser.tab.c"
     break;
 
-  case 105: /* attribute: tAPPOBJECT  */
+  case 104: /* attribute: tACTIVATABLE '(' contract_req ')'  */
 #line 584 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_APPOBJECT); }
-#line 3975 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_ACTIVATABLE, (yyvsp[-1].expr)); }
+#line 3978 "tools/widl/parser.tab.c"
     break;
 
-  case 106: /* attribute: tASYNC  */
+  case 105: /* attribute: tAGGREGATABLE  */
 #line 585 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_ASYNC); }
-#line 3981 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_AGGREGATABLE); }
+#line 3984 "tools/widl/parser.tab.c"
     break;
 
-  case 107: /* attribute: tAUTOHANDLE  */
+  case 106: /* attribute: tANNOTATION '(' aSTRING ')'  */
 #line 586 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_AUTO_HANDLE); }
-#line 3987 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_ANNOTATION, (yyvsp[-1].str)); }
+#line 3990 "tools/widl/parser.tab.c"
     break;
 
-  case 108: /* attribute: tBINDABLE  */
+  case 107: /* attribute: tAPPOBJECT  */
 #line 587 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_BINDABLE); }
-#line 3993 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_APPOBJECT); }
+#line 3996 "tools/widl/parser.tab.c"
     break;
 
-  case 109: /* attribute: tBROADCAST  */
+  case 108: /* attribute: tASYNC  */
 #line 588 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_BROADCAST); }
-#line 3999 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_ASYNC); }
+#line 4002 "tools/widl/parser.tab.c"
     break;
 
-  case 110: /* attribute: tCALLAS '(' ident ')'  */
+  case 109: /* attribute: tAUTOHANDLE  */
 #line 589 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_CALLAS, (yyvsp[-1].var)); }
-#line 4005 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_AUTO_HANDLE); }
+#line 4008 "tools/widl/parser.tab.c"
     break;
 
-  case 111: /* attribute: tCASE '(' expr_list_int_const ')'  */
+  case 110: /* attribute: tBINDABLE  */
 #line 590 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_CASE, (yyvsp[-1].expr_list)); }
-#line 4011 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_BINDABLE); }
+#line 4014 "tools/widl/parser.tab.c"
     break;
 
-  case 112: /* attribute: tCODE  */
+  case 111: /* attribute: tBROADCAST  */
 #line 591 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_CODE); }
-#line 4017 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_BROADCAST); }
+#line 4020 "tools/widl/parser.tab.c"
     break;
 
-  case 113: /* attribute: tCOMMSTATUS  */
+  case 112: /* attribute: tCALLAS '(' ident ')'  */
 #line 592 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_COMMSTATUS); }
-#line 4023 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_CALLAS, (yyvsp[-1].var)); }
+#line 4026 "tools/widl/parser.tab.c"
     break;
 
-  case 114: /* attribute: tCONTEXTHANDLE  */
+  case 113: /* attribute: tCASE '(' expr_list_int_const ')'  */
 #line 593 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); }
-#line 4029 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_CASE, (yyvsp[-1].expr_list)); }
+#line 4032 "tools/widl/parser.tab.c"
     break;
 
-  case 115: /* attribute: tCONTEXTHANDLENOSERIALIZE  */
+  case 114: /* attribute: tCODE  */
 #line 594 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ }
-#line 4035 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_CODE); }
+#line 4038 "tools/widl/parser.tab.c"
     break;
 
-  case 116: /* attribute: tCONTEXTHANDLESERIALIZE  */
+  case 115: /* attribute: tCOMMSTATUS  */
 #line 595 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ }
-#line 4041 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_COMMSTATUS); }
+#line 4044 "tools/widl/parser.tab.c"
     break;
 
-  case 117: /* attribute: tCONTRACT '(' contract_req ')'  */
+  case 116: /* attribute: tCONTEXTHANDLE  */
 #line 596 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_CONTRACT, (yyvsp[-1].expr)); }
-#line 4047 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); }
+#line 4050 "tools/widl/parser.tab.c"
     break;
 
-  case 118: /* attribute: tCONTRACTVERSION '(' contract_ver ')'  */
+  case 117: /* attribute: tCONTEXTHANDLENOSERIALIZE  */
 #line 597 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_CONTRACTVERSION, (yyvsp[-1].num)); }
-#line 4053 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ }
+#line 4056 "tools/widl/parser.tab.c"
     break;
 
-  case 119: /* attribute: tCONTROL  */
+  case 118: /* attribute: tCONTEXTHANDLESERIALIZE  */
 #line 598 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_CONTROL); }
-#line 4059 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ }
+#line 4062 "tools/widl/parser.tab.c"
     break;
 
-  case 120: /* attribute: tCUSTOM '(' uuid_string ',' expr_const ')'  */
+  case 119: /* attribute: tCONTRACT '(' contract_req ')'  */
 #line 599 "tools/widl/parser.y"
-                                                     { (yyval.attr) = make_custom_attr((yyvsp[-3].uuid), (yyvsp[-1].expr)); }
-#line 4065 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_CONTRACT, (yyvsp[-1].expr)); }
+#line 4068 "tools/widl/parser.tab.c"
     break;
 
-  case 121: /* attribute: tDECODE  */
+  case 120: /* attribute: tCONTRACTVERSION '(' contract_ver ')'  */
 #line 600 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DECODE); }
-#line 4071 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_CONTRACTVERSION, (yyvsp[-1].num)); }
+#line 4074 "tools/widl/parser.tab.c"
     break;
 
-  case 122: /* attribute: tDEFAULT  */
+  case 121: /* attribute: tCONTROL  */
 #line 601 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DEFAULT); }
-#line 4077 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_CONTROL); }
+#line 4080 "tools/widl/parser.tab.c"
     break;
 
-  case 123: /* attribute: tDEFAULTBIND  */
+  case 122: /* attribute: tCUSTOM '(' uuid_string ',' expr_const ')'  */
 #line 602 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DEFAULTBIND); }
-#line 4083 "tools/widl/parser.tab.c"
+                                                     { (yyval.attr) = make_custom_attr((yyvsp[-3].uuid), (yyvsp[-1].expr)); }
+#line 4086 "tools/widl/parser.tab.c"
     break;
 
-  case 124: /* attribute: tDEFAULTCOLLELEM  */
+  case 123: /* attribute: tDECODE  */
 #line 603 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); }
-#line 4089 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DECODE); }
+#line 4092 "tools/widl/parser.tab.c"
     break;
 
-  case 125: /* attribute: tDEFAULTVALUE '(' expr_const ')'  */
+  case 124: /* attribute: tDEFAULT  */
 #line 604 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE, (yyvsp[-1].expr)); }
-#line 4095 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DEFAULT); }
+#line 4098 "tools/widl/parser.tab.c"
     break;
 
-  case 126: /* attribute: tDEFAULTVTABLE  */
+  case 125: /* attribute: tDEFAULTBIND  */
 #line 605 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); }
-#line 4101 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DEFAULTBIND); }
+#line 4104 "tools/widl/parser.tab.c"
     break;
 
-  case 127: /* attribute: tDISABLECONSISTENCYCHECK  */
+  case 126: /* attribute: tDEFAULTCOLLELEM  */
 #line 606 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DISABLECONSISTENCYCHECK); }
-#line 4107 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); }
+#line 4110 "tools/widl/parser.tab.c"
     break;
 
-  case 128: /* attribute: tDISPLAYBIND  */
+  case 127: /* attribute: tDEFAULTVALUE '(' expr_const ')'  */
 #line 607 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); }
-#line 4113 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE, (yyvsp[-1].expr)); }
+#line 4116 "tools/widl/parser.tab.c"
     break;
 
-  case 129: /* attribute: tDLLNAME '(' aSTRING ')'  */
+  case 128: /* attribute: tDEFAULTVTABLE  */
 #line 608 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[-1].str)); }
-#line 4119 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); }
+#line 4122 "tools/widl/parser.tab.c"
     break;
 
-  case 130: /* attribute: tDUAL  */
+  case 129: /* attribute: tDISABLECONSISTENCYCHECK  */
 #line 609 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DUAL); }
-#line 4125 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DISABLECONSISTENCYCHECK); }
+#line 4128 "tools/widl/parser.tab.c"
     break;
 
-  case 131: /* attribute: tENABLEALLOCATE  */
+  case 130: /* attribute: tDISPLAYBIND  */
 #line 610 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_ENABLEALLOCATE); }
-#line 4131 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); }
+#line 4134 "tools/widl/parser.tab.c"
     break;
 
-  case 132: /* attribute: tENCODE  */
+  case 131: /* attribute: tDLLNAME '(' aSTRING ')'  */
 #line 611 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_ENCODE); }
-#line 4137 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[-1].str)); }
+#line 4140 "tools/widl/parser.tab.c"
     break;
 
-  case 133: /* attribute: tENDPOINT '(' str_list ')'  */
+  case 132: /* attribute: tDUAL  */
 #line 612 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[-1].str_list)); }
-#line 4143 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DUAL); }
+#line 4146 "tools/widl/parser.tab.c"
     break;
 
-  case 134: /* attribute: tENTRY '(' expr_const ')'  */
+  case 133: /* attribute: tENABLEALLOCATE  */
 #line 613 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_ENTRY, (yyvsp[-1].expr)); }
-#line 4149 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_ENABLEALLOCATE); }
+#line 4152 "tools/widl/parser.tab.c"
     break;
 
-  case 135: /* attribute: tEVENTADD  */
+  case 134: /* attribute: tENCODE  */
 #line 614 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_EVENTADD); }
-#line 4155 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_ENCODE); }
+#line 4158 "tools/widl/parser.tab.c"
     break;
 
-  case 136: /* attribute: tEVENTREMOVE  */
+  case 135: /* attribute: tENDPOINT '(' str_list ')'  */
 #line 615 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_EVENTREMOVE); }
-#line 4161 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[-1].str_list)); }
+#line 4164 "tools/widl/parser.tab.c"
     break;
 
-  case 137: /* attribute: tEXCLUSIVETO '(' decl_spec ')'  */
+  case 136: /* attribute: tENTRY '(' expr_const ')'  */
 #line 616 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_ENTRY, (yyvsp[-1].expr)); }
+#line 4170 "tools/widl/parser.tab.c"
+    break;
+
+  case 137: /* attribute: tEVENTADD  */
+#line 617 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_EVENTADD); }
+#line 4176 "tools/widl/parser.tab.c"
+    break;
+
+  case 138: /* attribute: tEVENTREMOVE  */
+#line 618 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_EVENTREMOVE); }
+#line 4182 "tools/widl/parser.tab.c"
+    break;
+
+  case 139: /* attribute: tEXCLUSIVETO '(' decl_spec ')'  */
+#line 619 "tools/widl/parser.y"
                                                 { if ((yyvsp[-1].declspec)->type->type_type != TYPE_RUNTIMECLASS)
 						      error_loc("type %s is not a runtimeclass\n", (yyvsp[-1].declspec)->type->name);
 						  (yyval.attr) = make_attrp(ATTR_EXCLUSIVETO, (yyvsp[-1].declspec)->type); }
-#line 4169 "tools/widl/parser.tab.c"
+#line 4190 "tools/widl/parser.tab.c"
     break;
 
-  case 138: /* attribute: tEXPLICITHANDLE  */
-#line 619 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
-#line 4175 "tools/widl/parser.tab.c"
-    break;
-
-  case 139: /* attribute: tFAULTSTATUS  */
-#line 620 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_FAULTSTATUS); }
-#line 4181 "tools/widl/parser.tab.c"
-    break;
-
-  case 140: /* attribute: tFLAGS  */
-#line 621 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_FLAGS); }
-#line 4187 "tools/widl/parser.tab.c"
-    break;
-
-  case 141: /* attribute: tFORCEALLOCATE  */
+  case 140: /* attribute: tEXPLICITHANDLE  */
 #line 622 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_FORCEALLOCATE); }
-#line 4193 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
+#line 4196 "tools/widl/parser.tab.c"
     break;
 
-  case 142: /* attribute: tHANDLE  */
+  case 141: /* attribute: tFAULTSTATUS  */
 #line 623 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_HANDLE); }
-#line 4199 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_FAULTSTATUS); }
+#line 4202 "tools/widl/parser.tab.c"
     break;
 
-  case 143: /* attribute: tHELPCONTEXT '(' expr_int_const ')'  */
+  case 142: /* attribute: tFLAGS  */
 #line 624 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[-1].expr)); }
-#line 4205 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_FLAGS); }
+#line 4208 "tools/widl/parser.tab.c"
     break;
 
-  case 144: /* attribute: tHELPFILE '(' aSTRING ')'  */
+  case 143: /* attribute: tFORCEALLOCATE  */
 #line 625 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[-1].str)); }
-#line 4211 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_FORCEALLOCATE); }
+#line 4214 "tools/widl/parser.tab.c"
     break;
 
-  case 145: /* attribute: tHELPSTRING '(' aSTRING ')'  */
+  case 144: /* attribute: tHANDLE  */
 #line 626 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[-1].str)); }
-#line 4217 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_HANDLE); }
+#line 4220 "tools/widl/parser.tab.c"
     break;
 
-  case 146: /* attribute: tHELPSTRINGCONTEXT '(' expr_int_const ')'  */
+  case 145: /* attribute: tHELPCONTEXT '(' expr_int_const ')'  */
 #line 627 "tools/widl/parser.y"
-                                                        { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[-1].expr)); }
-#line 4223 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[-1].expr)); }
+#line 4226 "tools/widl/parser.tab.c"
     break;
 
-  case 147: /* attribute: tHELPSTRINGDLL '(' aSTRING ')'  */
+  case 146: /* attribute: tHELPFILE '(' aSTRING ')'  */
 #line 628 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[-1].str)); }
-#line 4229 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[-1].str)); }
+#line 4232 "tools/widl/parser.tab.c"
     break;
 
-  case 148: /* attribute: tHIDDEN  */
+  case 147: /* attribute: tHELPSTRING '(' aSTRING ')'  */
 #line 629 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_HIDDEN); }
-#line 4235 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[-1].str)); }
+#line 4238 "tools/widl/parser.tab.c"
     break;
 
-  case 149: /* attribute: tID '(' expr_int_const ')'  */
+  case 148: /* attribute: tHELPSTRINGCONTEXT '(' expr_int_const ')'  */
 #line 630 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[-1].expr)); }
-#line 4241 "tools/widl/parser.tab.c"
+                                                        { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[-1].expr)); }
+#line 4244 "tools/widl/parser.tab.c"
     break;
 
-  case 150: /* attribute: tIDEMPOTENT  */
+  case 149: /* attribute: tHELPSTRINGDLL '(' aSTRING ')'  */
 #line 631 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); }
-#line 4247 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[-1].str)); }
+#line 4250 "tools/widl/parser.tab.c"
     break;
 
-  case 151: /* attribute: tIGNORE  */
+  case 150: /* attribute: tHIDDEN  */
 #line 632 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_IGNORE); }
-#line 4253 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_HIDDEN); }
+#line 4256 "tools/widl/parser.tab.c"
     break;
 
-  case 152: /* attribute: tIIDIS '(' expr ')'  */
+  case 151: /* attribute: tID '(' expr_int_const ')'  */
 #line 633 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[-1].expr)); }
-#line 4259 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[-1].expr)); }
+#line 4262 "tools/widl/parser.tab.c"
     break;
 
-  case 153: /* attribute: tIMMEDIATEBIND  */
+  case 152: /* attribute: tIDEMPOTENT  */
 #line 634 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); }
-#line 4265 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); }
+#line 4268 "tools/widl/parser.tab.c"
     break;
 
-  case 154: /* attribute: tIMPLICITHANDLE '(' arg ')'  */
+  case 153: /* attribute: tIGNORE  */
 #line 635 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[-1].var)); }
-#line 4271 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_IGNORE); }
+#line 4274 "tools/widl/parser.tab.c"
     break;
 
-  case 155: /* attribute: tIN  */
+  case 154: /* attribute: tIIDIS '(' expr ')'  */
 #line 636 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_IN); }
-#line 4277 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[-1].expr)); }
+#line 4280 "tools/widl/parser.tab.c"
     break;
 
-  case 156: /* attribute: tINPUTSYNC  */
+  case 155: /* attribute: tIMMEDIATEBIND  */
 #line 637 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_INPUTSYNC); }
-#line 4283 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); }
+#line 4286 "tools/widl/parser.tab.c"
     break;
 
-  case 157: /* attribute: tLENGTHIS '(' m_exprs ')'  */
+  case 156: /* attribute: tIMPLICITHANDLE '(' arg ')'  */
 #line 638 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[-1].expr_list)); }
-#line 4289 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[-1].var)); }
+#line 4292 "tools/widl/parser.tab.c"
     break;
 
-  case 158: /* attribute: tLCID '(' expr_int_const ')'  */
+  case 157: /* attribute: tIN  */
 #line 639 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_LIBLCID, (yyvsp[-1].expr)); }
-#line 4295 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_IN); }
+#line 4298 "tools/widl/parser.tab.c"
     break;
 
-  case 159: /* attribute: tLCID  */
+  case 158: /* attribute: tINPUTSYNC  */
 #line 640 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PARAMLCID); }
-#line 4301 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_INPUTSYNC); }
+#line 4304 "tools/widl/parser.tab.c"
     break;
 
-  case 160: /* attribute: tLICENSED  */
+  case 159: /* attribute: tLENGTHIS '(' m_exprs ')'  */
 #line 641 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_LICENSED); }
-#line 4307 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[-1].expr_list)); }
+#line 4310 "tools/widl/parser.tab.c"
     break;
 
-  case 161: /* attribute: tLOCAL  */
+  case 160: /* attribute: tLCID '(' expr_int_const ')'  */
 #line 642 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_LOCAL); }
-#line 4313 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_LIBLCID, (yyvsp[-1].expr)); }
+#line 4316 "tools/widl/parser.tab.c"
     break;
 
-  case 162: /* attribute: tMARSHALINGBEHAVIOR '(' marshaling_behavior ')'  */
+  case 161: /* attribute: tLCID  */
+#line 643 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PARAMLCID); }
+#line 4322 "tools/widl/parser.tab.c"
+    break;
+
+  case 162: /* attribute: tLICENSED  */
 #line 644 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_MARSHALING_BEHAVIOR, (yyvsp[-1].num)); }
-#line 4319 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_LICENSED); }
+#line 4328 "tools/widl/parser.tab.c"
     break;
 
-  case 163: /* attribute: tMAYBE  */
+  case 163: /* attribute: tLOCAL  */
 #line 645 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_MAYBE); }
-#line 4325 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_LOCAL); }
+#line 4334 "tools/widl/parser.tab.c"
     break;
 
-  case 164: /* attribute: tMESSAGE  */
-#line 646 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_MESSAGE); }
-#line 4331 "tools/widl/parser.tab.c"
-    break;
-
-  case 165: /* attribute: tNOCODE  */
+  case 164: /* attribute: tMARSHALINGBEHAVIOR '(' marshaling_behavior ')'  */
 #line 647 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_NOCODE); }
-#line 4337 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_MARSHALING_BEHAVIOR, (yyvsp[-1].num)); }
+#line 4340 "tools/widl/parser.tab.c"
     break;
 
-  case 166: /* attribute: tNONBROWSABLE  */
+  case 165: /* attribute: tMAYBE  */
 #line 648 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); }
-#line 4343 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_MAYBE); }
+#line 4346 "tools/widl/parser.tab.c"
     break;
 
-  case 167: /* attribute: tNONCREATABLE  */
+  case 166: /* attribute: tMESSAGE  */
 #line 649 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_NONCREATABLE); }
-#line 4349 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_MESSAGE); }
+#line 4352 "tools/widl/parser.tab.c"
     break;
 
-  case 168: /* attribute: tNONEXTENSIBLE  */
+  case 167: /* attribute: tNOCODE  */
 #line 650 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); }
-#line 4355 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_NOCODE); }
+#line 4358 "tools/widl/parser.tab.c"
     break;
 
-  case 169: /* attribute: tNOTIFY  */
+  case 168: /* attribute: tNONBROWSABLE  */
 #line 651 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_NOTIFY); }
-#line 4361 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); }
+#line 4364 "tools/widl/parser.tab.c"
     break;
 
-  case 170: /* attribute: tNOTIFYFLAG  */
+  case 169: /* attribute: tNONCREATABLE  */
 #line 652 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_NOTIFYFLAG); }
-#line 4367 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_NONCREATABLE); }
+#line 4370 "tools/widl/parser.tab.c"
     break;
 
-  case 171: /* attribute: tOBJECT  */
+  case 170: /* attribute: tNONEXTENSIBLE  */
 #line 653 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_OBJECT); }
-#line 4373 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); }
+#line 4376 "tools/widl/parser.tab.c"
     break;
 
-  case 172: /* attribute: tODL  */
+  case 171: /* attribute: tNOTIFY  */
 #line 654 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_ODL); }
-#line 4379 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_NOTIFY); }
+#line 4382 "tools/widl/parser.tab.c"
     break;
 
-  case 173: /* attribute: tOLEAUTOMATION  */
+  case 172: /* attribute: tNOTIFYFLAG  */
 #line 655 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); }
-#line 4385 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_NOTIFYFLAG); }
+#line 4388 "tools/widl/parser.tab.c"
     break;
 
-  case 174: /* attribute: tOPTIMIZE '(' aSTRING ')'  */
+  case 173: /* attribute: tOBJECT  */
 #line 656 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_OPTIMIZE, (yyvsp[-1].str)); }
-#line 4391 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_OBJECT); }
+#line 4394 "tools/widl/parser.tab.c"
     break;
 
-  case 175: /* attribute: tOPTIONAL  */
+  case 174: /* attribute: tODL  */
 #line 657 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_OPTIONAL); }
-#line 4397 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_ODL); }
+#line 4400 "tools/widl/parser.tab.c"
     break;
 
-  case 176: /* attribute: tOUT  */
+  case 175: /* attribute: tOLEAUTOMATION  */
 #line 658 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_OUT); }
-#line 4403 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); }
+#line 4406 "tools/widl/parser.tab.c"
     break;
 
-  case 177: /* attribute: tPARTIALIGNORE  */
+  case 176: /* attribute: tOPTIMIZE '(' aSTRING ')'  */
 #line 659 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PARTIALIGNORE); }
-#line 4409 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_OPTIMIZE, (yyvsp[-1].str)); }
+#line 4412 "tools/widl/parser.tab.c"
     break;
 
-  case 178: /* attribute: tPOINTERDEFAULT '(' pointer_type ')'  */
+  case 177: /* attribute: tOPTIONAL  */
 #line 660 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[-1].num)); }
-#line 4415 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_OPTIONAL); }
+#line 4418 "tools/widl/parser.tab.c"
     break;
 
-  case 179: /* attribute: tPROGID '(' aSTRING ')'  */
+  case 178: /* attribute: tOUT  */
 #line 661 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_PROGID, (yyvsp[-1].str)); }
-#line 4421 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_OUT); }
+#line 4424 "tools/widl/parser.tab.c"
     break;
 
-  case 180: /* attribute: tPROPGET  */
+  case 179: /* attribute: tPARTIALIGNORE  */
 #line 662 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PROPGET); }
-#line 4427 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_PARTIALIGNORE); }
+#line 4430 "tools/widl/parser.tab.c"
     break;
 
-  case 181: /* attribute: tPROPPUT  */
+  case 180: /* attribute: tPOINTERDEFAULT '(' pointer_type ')'  */
 #line 663 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PROPPUT); }
-#line 4433 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[-1].num)); }
+#line 4436 "tools/widl/parser.tab.c"
     break;
 
-  case 182: /* attribute: tPROPPUTREF  */
+  case 181: /* attribute: tPROGID '(' aSTRING ')'  */
 #line 664 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PROPPUTREF); }
-#line 4439 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_PROGID, (yyvsp[-1].str)); }
+#line 4442 "tools/widl/parser.tab.c"
     break;
 
-  case 183: /* attribute: tPROXY  */
+  case 182: /* attribute: tPROPGET  */
 #line 665 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PROXY); }
-#line 4445 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_PROPGET); }
+#line 4448 "tools/widl/parser.tab.c"
     break;
 
-  case 184: /* attribute: tPUBLIC  */
+  case 183: /* attribute: tPROPPUT  */
 #line 666 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PUBLIC); }
-#line 4451 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_PROPPUT); }
+#line 4454 "tools/widl/parser.tab.c"
     break;
 
-  case 185: /* attribute: tRANGE '(' expr_int_const ',' expr_int_const ')'  */
+  case 184: /* attribute: tPROPPUTREF  */
+#line 667 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PROPPUTREF); }
+#line 4460 "tools/widl/parser.tab.c"
+    break;
+
+  case 185: /* attribute: tPROXY  */
 #line 668 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PROXY); }
+#line 4466 "tools/widl/parser.tab.c"
+    break;
+
+  case 186: /* attribute: tPUBLIC  */
+#line 669 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PUBLIC); }
+#line 4472 "tools/widl/parser.tab.c"
+    break;
+
+  case 187: /* attribute: tRANGE '(' expr_int_const ',' expr_int_const ')'  */
+#line 671 "tools/widl/parser.y"
                                                 { expr_list_t *list = append_expr( NULL, (yyvsp[-3].expr) );
 						  list = append_expr( list, (yyvsp[-1].expr) );
 						  (yyval.attr) = make_attrp(ATTR_RANGE, list); }
-#line 4459 "tools/widl/parser.tab.c"
+#line 4480 "tools/widl/parser.tab.c"
     break;
 
-  case 186: /* attribute: tREADONLY  */
-#line 671 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_READONLY); }
-#line 4465 "tools/widl/parser.tab.c"
-    break;
-
-  case 187: /* attribute: tREPRESENTAS '(' type ')'  */
-#line 672 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_REPRESENTAS, (yyvsp[-1].type)); }
-#line 4471 "tools/widl/parser.tab.c"
-    break;
-
-  case 188: /* attribute: tREQUESTEDIT  */
-#line 673 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_REQUESTEDIT); }
-#line 4477 "tools/widl/parser.tab.c"
-    break;
-
-  case 189: /* attribute: tRESTRICTED  */
+  case 188: /* attribute: tREADONLY  */
 #line 674 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_RESTRICTED); }
-#line 4483 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_READONLY); }
+#line 4486 "tools/widl/parser.tab.c"
     break;
 
-  case 190: /* attribute: tRETVAL  */
+  case 189: /* attribute: tREPRESENTAS '(' type ')'  */
 #line 675 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_RETVAL); }
-#line 4489 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_REPRESENTAS, (yyvsp[-1].type)); }
+#line 4492 "tools/widl/parser.tab.c"
     break;
 
-  case 191: /* attribute: tSIZEIS '(' m_exprs ')'  */
+  case 190: /* attribute: tREQUESTEDIT  */
 #line 676 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_SIZEIS, (yyvsp[-1].expr_list)); }
-#line 4495 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_REQUESTEDIT); }
+#line 4498 "tools/widl/parser.tab.c"
     break;
 
-  case 192: /* attribute: tSOURCE  */
+  case 191: /* attribute: tRESTRICTED  */
 #line 677 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_SOURCE); }
-#line 4501 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_RESTRICTED); }
+#line 4504 "tools/widl/parser.tab.c"
     break;
 
-  case 193: /* attribute: tSTATIC '(' static_attr ')'  */
+  case 192: /* attribute: tRETVAL  */
 #line 678 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_STATIC, (yyvsp[-1].expr)); }
-#line 4507 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_RETVAL); }
+#line 4510 "tools/widl/parser.tab.c"
     break;
 
-  case 194: /* attribute: tSTRICTCONTEXTHANDLE  */
+  case 193: /* attribute: tSIZEIS '(' m_exprs ')'  */
 #line 679 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_STRICTCONTEXTHANDLE); }
-#line 4513 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_SIZEIS, (yyvsp[-1].expr_list)); }
+#line 4516 "tools/widl/parser.tab.c"
     break;
 
-  case 195: /* attribute: tSTRING  */
+  case 194: /* attribute: tSOURCE  */
 #line 680 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_STRING); }
-#line 4519 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_SOURCE); }
+#line 4522 "tools/widl/parser.tab.c"
     break;
 
-  case 196: /* attribute: tSWITCHIS '(' expr ')'  */
+  case 195: /* attribute: tSTATIC '(' static_attr ')'  */
 #line 681 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_SWITCHIS, (yyvsp[-1].expr)); }
-#line 4525 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_STATIC, (yyvsp[-1].expr)); }
+#line 4528 "tools/widl/parser.tab.c"
     break;
 
-  case 197: /* attribute: tSWITCHTYPE '(' type ')'  */
+  case 196: /* attribute: tSTRICTCONTEXTHANDLE  */
 #line 682 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_SWITCHTYPE, (yyvsp[-1].type)); }
-#line 4531 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_STRICTCONTEXTHANDLE); }
+#line 4534 "tools/widl/parser.tab.c"
     break;
 
-  case 198: /* attribute: tTRANSMITAS '(' type ')'  */
+  case 197: /* attribute: tSTRING  */
 #line 683 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_TRANSMITAS, (yyvsp[-1].type)); }
-#line 4537 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_STRING); }
+#line 4540 "tools/widl/parser.tab.c"
     break;
 
-  case 199: /* attribute: tTHREADING '(' threading_type ')'  */
+  case 198: /* attribute: tSWITCHIS '(' expr ')'  */
 #line 684 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_THREADING, (yyvsp[-1].num)); }
-#line 4543 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_SWITCHIS, (yyvsp[-1].expr)); }
+#line 4546 "tools/widl/parser.tab.c"
     break;
 
-  case 200: /* attribute: tUIDEFAULT  */
+  case 199: /* attribute: tSWITCHTYPE '(' type ')'  */
 #line 685 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_UIDEFAULT); }
-#line 4549 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_SWITCHTYPE, (yyvsp[-1].type)); }
+#line 4552 "tools/widl/parser.tab.c"
     break;
 
-  case 201: /* attribute: tUSESGETLASTERROR  */
+  case 200: /* attribute: tTRANSMITAS '(' type ')'  */
 #line 686 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_USESGETLASTERROR); }
-#line 4555 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_TRANSMITAS, (yyvsp[-1].type)); }
+#line 4558 "tools/widl/parser.tab.c"
     break;
 
-  case 202: /* attribute: tUSERMARSHAL '(' type ')'  */
+  case 201: /* attribute: tTHREADING '(' threading_type ')'  */
 #line 687 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_USERMARSHAL, (yyvsp[-1].type)); }
-#line 4561 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_THREADING, (yyvsp[-1].num)); }
+#line 4564 "tools/widl/parser.tab.c"
     break;
 
-  case 203: /* attribute: tUUID '(' uuid_string ')'  */
+  case 202: /* attribute: tUIDEFAULT  */
 #line 688 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_UUID, (yyvsp[-1].uuid)); }
-#line 4567 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_UIDEFAULT); }
+#line 4570 "tools/widl/parser.tab.c"
     break;
 
-  case 204: /* attribute: tASYNCUUID '(' uuid_string ')'  */
+  case 203: /* attribute: tUSESGETLASTERROR  */
 #line 689 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_ASYNCUUID, (yyvsp[-1].uuid)); }
-#line 4573 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_USESGETLASTERROR); }
+#line 4576 "tools/widl/parser.tab.c"
     break;
 
-  case 205: /* attribute: tV1ENUM  */
+  case 204: /* attribute: tUSERMARSHAL '(' type ')'  */
 #line 690 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_V1ENUM); }
-#line 4579 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_USERMARSHAL, (yyvsp[-1].type)); }
+#line 4582 "tools/widl/parser.tab.c"
     break;
 
-  case 206: /* attribute: tVARARG  */
+  case 205: /* attribute: tUUID '(' uuid_string ')'  */
 #line 691 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_VARARG); }
-#line 4585 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_UUID, (yyvsp[-1].uuid)); }
+#line 4588 "tools/widl/parser.tab.c"
     break;
 
-  case 207: /* attribute: tVERSION '(' version ')'  */
+  case 206: /* attribute: tASYNCUUID '(' uuid_string ')'  */
 #line 692 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_VERSION, (yyvsp[-1].num)); }
-#line 4591 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_ASYNCUUID, (yyvsp[-1].uuid)); }
+#line 4594 "tools/widl/parser.tab.c"
     break;
 
-  case 208: /* attribute: tVIPROGID '(' aSTRING ')'  */
+  case 207: /* attribute: tV1ENUM  */
 #line 693 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_VIPROGID, (yyvsp[-1].str)); }
-#line 4597 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_V1ENUM); }
+#line 4600 "tools/widl/parser.tab.c"
     break;
 
-  case 209: /* attribute: tWIREMARSHAL '(' type ')'  */
+  case 208: /* attribute: tVARARG  */
 #line 694 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_WIREMARSHAL, (yyvsp[-1].type)); }
-#line 4603 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_VARARG); }
+#line 4606 "tools/widl/parser.tab.c"
     break;
 
-  case 210: /* attribute: pointer_type  */
+  case 209: /* attribute: tVERSION '(' version ')'  */
 #line 695 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_POINTERTYPE, (yyvsp[0].num)); }
-#line 4609 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_VERSION, (yyvsp[-1].num)); }
+#line 4612 "tools/widl/parser.tab.c"
     break;
 
-  case 212: /* uuid_string: aSTRING  */
-#line 700 "tools/widl/parser.y"
+  case 210: /* attribute: tVIPROGID '(' aSTRING ')'  */
+#line 696 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_VIPROGID, (yyvsp[-1].str)); }
+#line 4618 "tools/widl/parser.tab.c"
+    break;
+
+  case 211: /* attribute: tWIREMARSHAL '(' type ')'  */
+#line 697 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_WIREMARSHAL, (yyvsp[-1].type)); }
+#line 4624 "tools/widl/parser.tab.c"
+    break;
+
+  case 212: /* attribute: pointer_type  */
+#line 698 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrv(ATTR_POINTERTYPE, (yyvsp[0].num)); }
+#line 4630 "tools/widl/parser.tab.c"
+    break;
+
+  case 214: /* uuid_string: aSTRING  */
+#line 703 "tools/widl/parser.y"
                                                 { if (!is_valid_uuid((yyvsp[0].str)))
 						    error_loc("invalid UUID: %s\n", (yyvsp[0].str));
 						  (yyval.uuid) = parse_uuid((yyvsp[0].str)); }
-#line 4617 "tools/widl/parser.tab.c"
+#line 4638 "tools/widl/parser.tab.c"
     break;
 
-  case 213: /* callconv: tCDECL  */
-#line 705 "tools/widl/parser.y"
-                                                { (yyval.str) = xstrdup("__cdecl"); }
-#line 4623 "tools/widl/parser.tab.c"
-    break;
-
-  case 214: /* callconv: tFASTCALL  */
-#line 706 "tools/widl/parser.y"
-                                                { (yyval.str) = xstrdup("__fastcall"); }
-#line 4629 "tools/widl/parser.tab.c"
-    break;
-
-  case 215: /* callconv: tPASCAL  */
-#line 707 "tools/widl/parser.y"
-                                                { (yyval.str) = xstrdup("__pascal"); }
-#line 4635 "tools/widl/parser.tab.c"
-    break;
-
-  case 216: /* callconv: tSTDCALL  */
+  case 215: /* callconv: tCDECL  */
 #line 708 "tools/widl/parser.y"
-                                                { (yyval.str) = xstrdup("__stdcall"); }
-#line 4641 "tools/widl/parser.tab.c"
+                                                { (yyval.str) = xstrdup("__cdecl"); }
+#line 4644 "tools/widl/parser.tab.c"
     break;
 
-  case 217: /* cases: %empty  */
+  case 216: /* callconv: tFASTCALL  */
+#line 709 "tools/widl/parser.y"
+                                                { (yyval.str) = xstrdup("__fastcall"); }
+#line 4650 "tools/widl/parser.tab.c"
+    break;
+
+  case 217: /* callconv: tPASCAL  */
+#line 710 "tools/widl/parser.y"
+                                                { (yyval.str) = xstrdup("__pascal"); }
+#line 4656 "tools/widl/parser.tab.c"
+    break;
+
+  case 218: /* callconv: tSTDCALL  */
 #line 711 "tools/widl/parser.y"
+                                                { (yyval.str) = xstrdup("__stdcall"); }
+#line 4662 "tools/widl/parser.tab.c"
+    break;
+
+  case 219: /* cases: %empty  */
+#line 714 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 4647 "tools/widl/parser.tab.c"
+#line 4668 "tools/widl/parser.tab.c"
     break;
 
-  case 218: /* cases: cases case  */
-#line 712 "tools/widl/parser.y"
-                                                { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); }
-#line 4653 "tools/widl/parser.tab.c"
-    break;
-
-  case 219: /* case: tCASE expr_int_const ':' union_field  */
+  case 220: /* cases: cases case  */
 #line 715 "tools/widl/parser.y"
+                                                { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); }
+#line 4674 "tools/widl/parser.tab.c"
+    break;
+
+  case 221: /* case: tCASE expr_int_const ':' union_field  */
+#line 718 "tools/widl/parser.y"
                                                 { attr_t *a = make_attrp(ATTR_CASE, append_expr( NULL, (yyvsp[-2].expr) ));
 						  (yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
 						  (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
 						}
-#line 4662 "tools/widl/parser.tab.c"
+#line 4683 "tools/widl/parser.tab.c"
     break;
 
-  case 220: /* case: tDEFAULT ':' union_field  */
-#line 719 "tools/widl/parser.y"
+  case 222: /* case: tDEFAULT ':' union_field  */
+#line 722 "tools/widl/parser.y"
                                                 { attr_t *a = make_attr(ATTR_DEFAULT);
 						  (yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
 						  (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
 						}
-#line 4671 "tools/widl/parser.tab.c"
+#line 4692 "tools/widl/parser.tab.c"
     break;
 
-  case 221: /* enums: %empty  */
-#line 725 "tools/widl/parser.y"
+  case 223: /* enums: %empty  */
+#line 728 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 4677 "tools/widl/parser.tab.c"
+#line 4698 "tools/widl/parser.tab.c"
     break;
 
-  case 222: /* enums: enum_list ','  */
-#line 726 "tools/widl/parser.y"
+  case 224: /* enums: enum_list ','  */
+#line 729 "tools/widl/parser.y"
                                                 { (yyval.var_list) = (yyvsp[-1].var_list); }
-#line 4683 "tools/widl/parser.tab.c"
+#line 4704 "tools/widl/parser.tab.c"
     break;
 
-  case 224: /* enum_list: enum  */
-#line 730 "tools/widl/parser.y"
+  case 226: /* enum_list: enum  */
+#line 733 "tools/widl/parser.y"
                                                 { if (!(yyvsp[0].var)->eval)
 						    (yyvsp[0].var)->eval = make_exprl(EXPR_NUM, 0 /* default for first enum entry */);
                                                   (yyval.var_list) = append_var( NULL, (yyvsp[0].var) );
 						}
-#line 4692 "tools/widl/parser.tab.c"
+#line 4713 "tools/widl/parser.tab.c"
     break;
 
-  case 225: /* enum_list: enum_list ',' enum  */
-#line 734 "tools/widl/parser.y"
+  case 227: /* enum_list: enum_list ',' enum  */
+#line 737 "tools/widl/parser.y"
                                                 { if (!(yyvsp[0].var)->eval)
                                                   {
                                                     var_t *last = LIST_ENTRY( list_tail((yyval.var_list)), var_t, entry );
@@ -4703,866 +4724,894 @@
                                                   }
                                                   (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) );
 						}
-#line 4707 "tools/widl/parser.tab.c"
+#line 4728 "tools/widl/parser.tab.c"
     break;
 
-  case 226: /* enum_member: m_attributes ident  */
-#line 746 "tools/widl/parser.y"
+  case 228: /* enum_member: m_attributes ident  */
+#line 749 "tools/widl/parser.y"
                                                 { (yyval.var) = (yyvsp[0].var);
 						  (yyval.var)->attrs = check_enum_member_attrs((yyvsp[-1].attr_list));
 						}
-#line 4715 "tools/widl/parser.tab.c"
+#line 4736 "tools/widl/parser.tab.c"
     break;
 
-  case 227: /* enum: enum_member '=' expr_int_const  */
-#line 751 "tools/widl/parser.y"
+  case 229: /* enum: enum_member '=' expr_int_const  */
+#line 754 "tools/widl/parser.y"
                                                 { (yyval.var) = reg_const((yyvsp[-2].var));
 						  (yyval.var)->eval = (yyvsp[0].expr);
                                                   (yyval.var)->declspec.type = type_new_int(TYPE_BASIC_INT, 0);
 						}
-#line 4724 "tools/widl/parser.tab.c"
+#line 4745 "tools/widl/parser.tab.c"
     break;
 
-  case 228: /* enum: enum_member  */
-#line 755 "tools/widl/parser.y"
+  case 230: /* enum: enum_member  */
+#line 758 "tools/widl/parser.y"
                                                 { (yyval.var) = reg_const((yyvsp[0].var));
                                                   (yyval.var)->declspec.type = type_new_int(TYPE_BASIC_INT, 0);
 						}
-#line 4732 "tools/widl/parser.tab.c"
+#line 4753 "tools/widl/parser.tab.c"
     break;
 
-  case 229: /* enumdef: tENUM m_typename '{' enums '}'  */
-#line 760 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_enum((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
-#line 4738 "tools/widl/parser.tab.c"
-    break;
-
-  case 230: /* m_exprs: m_expr  */
+  case 231: /* enumdef: tENUM m_typename '{' enums '}'  */
 #line 763 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_enum((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
+#line 4759 "tools/widl/parser.tab.c"
+    break;
+
+  case 232: /* m_exprs: m_expr  */
+#line 766 "tools/widl/parser.y"
                                                 { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); }
-#line 4744 "tools/widl/parser.tab.c"
+#line 4765 "tools/widl/parser.tab.c"
     break;
 
-  case 231: /* m_exprs: m_exprs ',' m_expr  */
-#line 764 "tools/widl/parser.y"
-                                                { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
-#line 4750 "tools/widl/parser.tab.c"
-    break;
-
-  case 232: /* m_expr: %empty  */
+  case 233: /* m_exprs: m_exprs ',' m_expr  */
 #line 767 "tools/widl/parser.y"
+                                                { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
+#line 4771 "tools/widl/parser.tab.c"
+    break;
+
+  case 234: /* m_expr: %empty  */
+#line 770 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr(EXPR_VOID); }
-#line 4756 "tools/widl/parser.tab.c"
+#line 4777 "tools/widl/parser.tab.c"
     break;
 
-  case 234: /* expr: aNUM  */
-#line 771 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num)); }
-#line 4762 "tools/widl/parser.tab.c"
-    break;
-
-  case 235: /* expr: aHEXNUM  */
-#line 772 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprl(EXPR_HEXNUM, (yyvsp[0].num)); }
-#line 4768 "tools/widl/parser.tab.c"
-    break;
-
-  case 236: /* expr: aDOUBLE  */
-#line 773 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[0].dbl)); }
-#line 4774 "tools/widl/parser.tab.c"
-    break;
-
-  case 237: /* expr: tFALSE  */
+  case 236: /* expr: aNUM  */
 #line 774 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 0); }
-#line 4780 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num)); }
+#line 4783 "tools/widl/parser.tab.c"
     break;
 
-  case 238: /* expr: tNULL  */
+  case 237: /* expr: aHEXNUM  */
 #line 775 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprl(EXPR_NUM, 0); }
-#line 4786 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_exprl(EXPR_HEXNUM, (yyvsp[0].num)); }
+#line 4789 "tools/widl/parser.tab.c"
     break;
 
-  case 239: /* expr: tTRUE  */
+  case 238: /* expr: aDOUBLE  */
 #line 776 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 1); }
-#line 4792 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[0].dbl)); }
+#line 4795 "tools/widl/parser.tab.c"
     break;
 
-  case 240: /* expr: aSTRING  */
+  case 239: /* expr: tFALSE  */
 #line 777 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprs(EXPR_STRLIT, (yyvsp[0].str)); }
-#line 4798 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 0); }
+#line 4801 "tools/widl/parser.tab.c"
     break;
 
-  case 241: /* expr: aWSTRING  */
+  case 240: /* expr: tNULL  */
 #line 778 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprs(EXPR_WSTRLIT, (yyvsp[0].str)); }
-#line 4804 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_exprl(EXPR_NUM, 0); }
+#line 4807 "tools/widl/parser.tab.c"
     break;
 
-  case 242: /* expr: aSQSTRING  */
+  case 241: /* expr: tTRUE  */
 #line 779 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprs(EXPR_CHARCONST, (yyvsp[0].str)); }
-#line 4810 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 1); }
+#line 4813 "tools/widl/parser.tab.c"
     break;
 
-  case 243: /* expr: aIDENTIFIER  */
+  case 242: /* expr: aSTRING  */
 #line 780 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str)); }
-#line 4816 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_exprs(EXPR_STRLIT, (yyvsp[0].str)); }
+#line 4819 "tools/widl/parser.tab.c"
     break;
 
-  case 244: /* expr: expr '?' expr ':' expr  */
+  case 243: /* expr: aWSTRING  */
 #line 781 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4822 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_exprs(EXPR_WSTRLIT, (yyvsp[0].str)); }
+#line 4825 "tools/widl/parser.tab.c"
     break;
 
-  case 245: /* expr: expr LOGICALOR expr  */
+  case 244: /* expr: aSQSTRING  */
 #line 782 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_LOGOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4828 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_exprs(EXPR_CHARCONST, (yyvsp[0].str)); }
+#line 4831 "tools/widl/parser.tab.c"
     break;
 
-  case 246: /* expr: expr LOGICALAND expr  */
+  case 245: /* expr: aIDENTIFIER  */
 #line 783 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_LOGAND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4834 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str)); }
+#line 4837 "tools/widl/parser.tab.c"
     break;
 
-  case 247: /* expr: expr '|' expr  */
+  case 246: /* expr: expr '?' expr ':' expr  */
 #line 784 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4840 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4843 "tools/widl/parser.tab.c"
     break;
 
-  case 248: /* expr: expr '^' expr  */
+  case 247: /* expr: expr LOGICALOR expr  */
 #line 785 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_XOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4846 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_LOGOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4849 "tools/widl/parser.tab.c"
     break;
 
-  case 249: /* expr: expr '&' expr  */
+  case 248: /* expr: expr LOGICALAND expr  */
 #line 786 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4852 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_LOGAND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4855 "tools/widl/parser.tab.c"
     break;
 
-  case 250: /* expr: expr EQUALITY expr  */
+  case 249: /* expr: expr '|' expr  */
 #line 787 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_EQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4858 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4861 "tools/widl/parser.tab.c"
     break;
 
-  case 251: /* expr: expr INEQUALITY expr  */
+  case 250: /* expr: expr '^' expr  */
 #line 788 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_INEQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4864 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_XOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4867 "tools/widl/parser.tab.c"
     break;
 
-  case 252: /* expr: expr '>' expr  */
+  case 251: /* expr: expr '&' expr  */
 #line 789 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_GTR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4870 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4873 "tools/widl/parser.tab.c"
     break;
 
-  case 253: /* expr: expr '<' expr  */
+  case 252: /* expr: expr EQUALITY expr  */
 #line 790 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_LESS, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4876 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_EQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4879 "tools/widl/parser.tab.c"
     break;
 
-  case 254: /* expr: expr GREATEREQUAL expr  */
+  case 253: /* expr: expr INEQUALITY expr  */
 #line 791 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_GTREQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4882 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_INEQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4885 "tools/widl/parser.tab.c"
     break;
 
-  case 255: /* expr: expr LESSEQUAL expr  */
+  case 254: /* expr: expr '>' expr  */
 #line 792 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_LESSEQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4888 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_GTR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4891 "tools/widl/parser.tab.c"
     break;
 
-  case 256: /* expr: expr SHL expr  */
+  case 255: /* expr: expr '<' expr  */
 #line 793 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4894 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_LESS, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4897 "tools/widl/parser.tab.c"
     break;
 
-  case 257: /* expr: expr SHR expr  */
+  case 256: /* expr: expr GREATEREQUAL expr  */
 #line 794 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4900 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_GTREQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4903 "tools/widl/parser.tab.c"
     break;
 
-  case 258: /* expr: expr '+' expr  */
+  case 257: /* expr: expr LESSEQUAL expr  */
 #line 795 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4906 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_LESSEQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4909 "tools/widl/parser.tab.c"
     break;
 
-  case 259: /* expr: expr '-' expr  */
+  case 258: /* expr: expr SHL expr  */
 #line 796 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4912 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4915 "tools/widl/parser.tab.c"
     break;
 
-  case 260: /* expr: expr '%' expr  */
+  case 259: /* expr: expr SHR expr  */
 #line 797 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_MOD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4918 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4921 "tools/widl/parser.tab.c"
     break;
 
-  case 261: /* expr: expr '*' expr  */
+  case 260: /* expr: expr '+' expr  */
 #line 798 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4924 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4927 "tools/widl/parser.tab.c"
     break;
 
-  case 262: /* expr: expr '/' expr  */
+  case 261: /* expr: expr '-' expr  */
 #line 799 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4930 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4933 "tools/widl/parser.tab.c"
     break;
 
-  case 263: /* expr: '!' expr  */
+  case 262: /* expr: expr '%' expr  */
 #line 800 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr1(EXPR_LOGNOT, (yyvsp[0].expr)); }
-#line 4936 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_MOD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4939 "tools/widl/parser.tab.c"
     break;
 
-  case 264: /* expr: '~' expr  */
+  case 263: /* expr: expr '*' expr  */
 #line 801 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[0].expr)); }
-#line 4942 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4945 "tools/widl/parser.tab.c"
     break;
 
-  case 265: /* expr: '+' expr  */
+  case 264: /* expr: expr '/' expr  */
 #line 802 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr1(EXPR_POS, (yyvsp[0].expr)); }
-#line 4948 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4951 "tools/widl/parser.tab.c"
     break;
 
-  case 266: /* expr: '-' expr  */
+  case 265: /* expr: '!' expr  */
 #line 803 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[0].expr)); }
-#line 4954 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr1(EXPR_LOGNOT, (yyvsp[0].expr)); }
+#line 4957 "tools/widl/parser.tab.c"
     break;
 
-  case 267: /* expr: '&' expr  */
+  case 266: /* expr: '~' expr  */
 #line 804 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[0].expr)); }
-#line 4960 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[0].expr)); }
+#line 4963 "tools/widl/parser.tab.c"
     break;
 
-  case 268: /* expr: '*' expr  */
+  case 267: /* expr: '+' expr  */
 #line 805 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[0].expr)); }
-#line 4966 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr1(EXPR_POS, (yyvsp[0].expr)); }
+#line 4969 "tools/widl/parser.tab.c"
     break;
 
-  case 269: /* expr: expr MEMBERPTR aIDENTIFIER  */
+  case 268: /* expr: '-' expr  */
 #line 806 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_MEMBER, make_expr1(EXPR_PPTR, (yyvsp[-2].expr)), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
-#line 4972 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[0].expr)); }
+#line 4975 "tools/widl/parser.tab.c"
     break;
 
-  case 270: /* expr: expr '.' aIDENTIFIER  */
+  case 269: /* expr: '&' expr  */
 #line 807 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_MEMBER, (yyvsp[-2].expr), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
-#line 4978 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[0].expr)); }
+#line 4981 "tools/widl/parser.tab.c"
     break;
 
-  case 271: /* expr: '(' unqualified_decl_spec m_abstract_declarator ')' expr  */
+  case 270: /* expr: '*' expr  */
+#line 808 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[0].expr)); }
+#line 4987 "tools/widl/parser.tab.c"
+    break;
+
+  case 271: /* expr: expr MEMBERPTR aIDENTIFIER  */
 #line 809 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprt(EXPR_CAST, declare_var(NULL, (yyvsp[-3].declspec), (yyvsp[-2].declarator), 0), (yyvsp[0].expr)); free((yyvsp[-3].declspec)); free((yyvsp[-2].declarator)); }
-#line 4984 "tools/widl/parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_MEMBER, make_expr1(EXPR_PPTR, (yyvsp[-2].expr)), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
+#line 4993 "tools/widl/parser.tab.c"
     break;
 
-  case 272: /* expr: tSIZEOF '(' unqualified_decl_spec m_abstract_declarator ')'  */
-#line 811 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprt(EXPR_SIZEOF, declare_var(NULL, (yyvsp[-2].declspec), (yyvsp[-1].declarator), 0), NULL); free((yyvsp[-2].declspec)); free((yyvsp[-1].declarator)); }
-#line 4990 "tools/widl/parser.tab.c"
+  case 272: /* expr: expr '.' aIDENTIFIER  */
+#line 810 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_MEMBER, (yyvsp[-2].expr), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
+#line 4999 "tools/widl/parser.tab.c"
     break;
 
-  case 273: /* expr: expr '[' expr ']'  */
+  case 273: /* expr: '(' unqualified_decl_spec m_abstract_declarator ')' expr  */
 #line 812 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_exprt(EXPR_CAST, declare_var(NULL, (yyvsp[-3].declspec), (yyvsp[-2].declarator), 0), (yyvsp[0].expr)); free((yyvsp[-3].declspec)); free((yyvsp[-2].declarator)); }
+#line 5005 "tools/widl/parser.tab.c"
+    break;
+
+  case 274: /* expr: tSIZEOF '(' unqualified_decl_spec m_abstract_declarator ')'  */
+#line 814 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_exprt(EXPR_SIZEOF, declare_var(NULL, (yyvsp[-2].declspec), (yyvsp[-1].declarator), 0), NULL); free((yyvsp[-2].declspec)); free((yyvsp[-1].declarator)); }
+#line 5011 "tools/widl/parser.tab.c"
+    break;
+
+  case 275: /* expr: expr '[' expr ']'  */
+#line 815 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_ARRAY, (yyvsp[-3].expr), (yyvsp[-1].expr)); }
-#line 4996 "tools/widl/parser.tab.c"
+#line 5017 "tools/widl/parser.tab.c"
     break;
 
-  case 274: /* expr: '(' expr ')'  */
-#line 813 "tools/widl/parser.y"
-                                                { (yyval.expr) = (yyvsp[-1].expr); }
-#line 5002 "tools/widl/parser.tab.c"
-    break;
-
-  case 275: /* expr_list_int_const: expr_int_const  */
+  case 276: /* expr: '(' expr ')'  */
 #line 816 "tools/widl/parser.y"
+                                                { (yyval.expr) = (yyvsp[-1].expr); }
+#line 5023 "tools/widl/parser.tab.c"
+    break;
+
+  case 277: /* expr_list_int_const: expr_int_const  */
+#line 819 "tools/widl/parser.y"
                                                 { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); }
-#line 5008 "tools/widl/parser.tab.c"
+#line 5029 "tools/widl/parser.tab.c"
     break;
 
-  case 276: /* expr_list_int_const: expr_list_int_const ',' expr_int_const  */
-#line 817 "tools/widl/parser.y"
-                                                        { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
-#line 5014 "tools/widl/parser.tab.c"
-    break;
-
-  case 277: /* expr_int_const: expr  */
+  case 278: /* expr_list_int_const: expr_list_int_const ',' expr_int_const  */
 #line 820 "tools/widl/parser.y"
+                                                        { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
+#line 5035 "tools/widl/parser.tab.c"
+    break;
+
+  case 279: /* expr_int_const: expr  */
+#line 823 "tools/widl/parser.y"
                                                 { (yyval.expr) = (yyvsp[0].expr);
 						  if (!(yyval.expr)->is_const)
 						      error_loc("expression is not an integer constant\n");
 						}
-#line 5023 "tools/widl/parser.tab.c"
+#line 5044 "tools/widl/parser.tab.c"
     break;
 
-  case 278: /* expr_const: expr  */
-#line 826 "tools/widl/parser.y"
+  case 280: /* expr_const: expr  */
+#line 829 "tools/widl/parser.y"
                                                 { (yyval.expr) = (yyvsp[0].expr);
 						  if (!(yyval.expr)->is_const && (yyval.expr)->type != EXPR_STRLIT && (yyval.expr)->type != EXPR_WSTRLIT)
 						      error_loc("expression is not constant\n");
 						}
-#line 5032 "tools/widl/parser.tab.c"
+#line 5053 "tools/widl/parser.tab.c"
     break;
 
-  case 279: /* fields: %empty  */
-#line 832 "tools/widl/parser.y"
+  case 281: /* fields: %empty  */
+#line 835 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 5038 "tools/widl/parser.tab.c"
+#line 5059 "tools/widl/parser.tab.c"
     break;
 
-  case 280: /* fields: fields field  */
-#line 833 "tools/widl/parser.y"
+  case 282: /* fields: fields field  */
+#line 836 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var_list((yyvsp[-1].var_list), (yyvsp[0].var_list)); }
-#line 5044 "tools/widl/parser.tab.c"
+#line 5065 "tools/widl/parser.tab.c"
     break;
 
-  case 281: /* field: m_attributes decl_spec struct_declarator_list ';'  */
-#line 837 "tools/widl/parser.y"
+  case 283: /* field: m_attributes decl_spec struct_declarator_list ';'  */
+#line 840 "tools/widl/parser.y"
                                                 { const char *first = LIST_ENTRY(list_head((yyvsp[-1].declarator_list)), declarator_t, entry)->var->name;
 						  check_field_attrs(first, (yyvsp[-3].attr_list));
 						  (yyval.var_list) = set_var_types((yyvsp[-3].attr_list), (yyvsp[-2].declspec), (yyvsp[-1].declarator_list));
 						}
-#line 5053 "tools/widl/parser.tab.c"
+#line 5074 "tools/widl/parser.tab.c"
     break;
 
-  case 282: /* field: m_attributes uniondef ';'  */
-#line 841 "tools/widl/parser.y"
+  case 284: /* field: m_attributes uniondef ';'  */
+#line 844 "tools/widl/parser.y"
                                                 { var_t *v = make_var(NULL);
 						  v->declspec.type = (yyvsp[-1].type); v->attrs = (yyvsp[-2].attr_list);
 						  (yyval.var_list) = append_var(NULL, v);
 						}
-#line 5062 "tools/widl/parser.tab.c"
+#line 5083 "tools/widl/parser.tab.c"
     break;
 
-  case 283: /* ne_union_field: s_field ';'  */
-#line 848 "tools/widl/parser.y"
+  case 285: /* ne_union_field: s_field ';'  */
+#line 851 "tools/widl/parser.y"
                                                 { (yyval.var) = (yyvsp[-1].var); }
-#line 5068 "tools/widl/parser.tab.c"
+#line 5089 "tools/widl/parser.tab.c"
     break;
 
-  case 284: /* ne_union_field: attributes ';'  */
-#line 849 "tools/widl/parser.y"
-                                                { (yyval.var) = make_var(NULL); (yyval.var)->attrs = (yyvsp[-1].attr_list); }
-#line 5074 "tools/widl/parser.tab.c"
-    break;
-
-  case 285: /* ne_union_fields: %empty  */
+  case 286: /* ne_union_field: attributes ';'  */
 #line 852 "tools/widl/parser.y"
+                                                { (yyval.var) = make_var(NULL); (yyval.var)->attrs = (yyvsp[-1].attr_list); }
+#line 5095 "tools/widl/parser.tab.c"
+    break;
+
+  case 287: /* ne_union_fields: %empty  */
+#line 855 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 5080 "tools/widl/parser.tab.c"
+#line 5101 "tools/widl/parser.tab.c"
     break;
 
-  case 286: /* ne_union_fields: ne_union_fields ne_union_field  */
-#line 853 "tools/widl/parser.y"
+  case 288: /* ne_union_fields: ne_union_fields ne_union_field  */
+#line 856 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); }
-#line 5086 "tools/widl/parser.tab.c"
+#line 5107 "tools/widl/parser.tab.c"
     break;
 
-  case 287: /* union_field: s_field ';'  */
-#line 857 "tools/widl/parser.y"
+  case 289: /* union_field: s_field ';'  */
+#line 860 "tools/widl/parser.y"
                                                 { (yyval.var) = (yyvsp[-1].var); }
-#line 5092 "tools/widl/parser.tab.c"
+#line 5113 "tools/widl/parser.tab.c"
     break;
 
-  case 288: /* union_field: ';'  */
-#line 858 "tools/widl/parser.y"
-                                                { (yyval.var) = NULL; }
-#line 5098 "tools/widl/parser.tab.c"
-    break;
-
-  case 289: /* s_field: m_attributes decl_spec declarator  */
+  case 290: /* union_field: ';'  */
 #line 861 "tools/widl/parser.y"
+                                                { (yyval.var) = NULL; }
+#line 5119 "tools/widl/parser.tab.c"
+    break;
+
+  case 291: /* s_field: m_attributes decl_spec declarator  */
+#line 864 "tools/widl/parser.y"
                                                 { (yyval.var) = declare_var(check_field_attrs((yyvsp[0].declarator)->var->name, (yyvsp[-2].attr_list)),
 						                (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
 						  free((yyvsp[0].declarator));
 						}
-#line 5107 "tools/widl/parser.tab.c"
+#line 5128 "tools/widl/parser.tab.c"
     break;
 
-  case 290: /* s_field: m_attributes structdef  */
-#line 865 "tools/widl/parser.y"
+  case 292: /* s_field: m_attributes structdef  */
+#line 868 "tools/widl/parser.y"
                                                 { var_t *v = make_var(NULL);
 						  v->declspec.type = (yyvsp[0].type); v->attrs = (yyvsp[-1].attr_list);
 						  (yyval.var) = v;
 						}
-#line 5116 "tools/widl/parser.tab.c"
+#line 5137 "tools/widl/parser.tab.c"
     break;
 
-  case 291: /* funcdef: declaration  */
-#line 871 "tools/widl/parser.y"
+  case 293: /* funcdef: declaration  */
+#line 874 "tools/widl/parser.y"
                                                 { (yyval.var) = (yyvsp[0].var);
 						  if (type_get_type((yyval.var)->declspec.type) != TYPE_FUNCTION)
 						    error_loc("only methods may be declared inside the methods section of a dispinterface\n");
 						  check_function_attrs((yyval.var)->name, (yyval.var)->attrs);
 						}
-#line 5126 "tools/widl/parser.tab.c"
+#line 5147 "tools/widl/parser.tab.c"
     break;
 
-  case 292: /* declaration: attributes decl_spec init_declarator  */
-#line 880 "tools/widl/parser.y"
+  case 294: /* declaration: attributes decl_spec init_declarator  */
+#line 883 "tools/widl/parser.y"
                                                 { (yyval.var) = declare_var((yyvsp[-2].attr_list), (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
 						  free((yyvsp[0].declarator));
 						}
-#line 5134 "tools/widl/parser.tab.c"
+#line 5155 "tools/widl/parser.tab.c"
     break;
 
-  case 293: /* declaration: decl_spec init_declarator  */
-#line 883 "tools/widl/parser.y"
+  case 295: /* declaration: decl_spec init_declarator  */
+#line 886 "tools/widl/parser.y"
                                                 { (yyval.var) = declare_var(NULL, (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
 						  free((yyvsp[0].declarator));
 						}
-#line 5142 "tools/widl/parser.tab.c"
+#line 5163 "tools/widl/parser.tab.c"
     break;
 
-  case 294: /* m_ident: %empty  */
-#line 888 "tools/widl/parser.y"
+  case 296: /* m_ident: %empty  */
+#line 891 "tools/widl/parser.y"
                                                 { (yyval.var) = NULL; }
-#line 5148 "tools/widl/parser.tab.c"
+#line 5169 "tools/widl/parser.tab.c"
     break;
 
-  case 296: /* m_typename: %empty  */
-#line 892 "tools/widl/parser.y"
+  case 298: /* m_typename: %empty  */
+#line 895 "tools/widl/parser.y"
                                                 { (yyval.str) = NULL; }
-#line 5154 "tools/widl/parser.tab.c"
+#line 5175 "tools/widl/parser.tab.c"
     break;
 
-  case 300: /* ident: typename  */
-#line 900 "tools/widl/parser.y"
-                                                { (yyval.var) = make_var((yyvsp[0].str)); }
-#line 5160 "tools/widl/parser.tab.c"
-    break;
-
-  case 301: /* base_type: tBYTE  */
+  case 302: /* ident: typename  */
 #line 903 "tools/widl/parser.y"
-                                                { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5166 "tools/widl/parser.tab.c"
+                                                { (yyval.var) = make_var((yyvsp[0].str)); }
+#line 5181 "tools/widl/parser.tab.c"
     break;
 
-  case 302: /* base_type: tWCHAR  */
-#line 904 "tools/widl/parser.y"
-                                                { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5172 "tools/widl/parser.tab.c"
-    break;
-
-  case 304: /* base_type: tSIGNED int_std  */
+  case 303: /* base_type: tBYTE  */
 #line 906 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), -1); }
-#line 5178 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
+#line 5187 "tools/widl/parser.tab.c"
     break;
 
-  case 305: /* base_type: tUNSIGNED int_std  */
+  case 304: /* base_type: tWCHAR  */
 #line 907 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), 1); }
-#line 5184 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
+#line 5193 "tools/widl/parser.tab.c"
     break;
 
-  case 306: /* base_type: tUNSIGNED  */
-#line 908 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT, 1); }
-#line 5190 "tools/widl/parser.tab.c"
-    break;
-
-  case 307: /* base_type: tFLOAT  */
+  case 306: /* base_type: tSIGNED int_std  */
 #line 909 "tools/widl/parser.y"
-                                                { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5196 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), -1); }
+#line 5199 "tools/widl/parser.tab.c"
     break;
 
-  case 308: /* base_type: tDOUBLE  */
+  case 307: /* base_type: tUNSIGNED int_std  */
 #line 910 "tools/widl/parser.y"
-                                                { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5202 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), 1); }
+#line 5205 "tools/widl/parser.tab.c"
     break;
 
-  case 309: /* base_type: tBOOLEAN  */
+  case 308: /* base_type: tUNSIGNED  */
 #line 911 "tools/widl/parser.y"
-                                                { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5208 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT, 1); }
+#line 5211 "tools/widl/parser.tab.c"
     break;
 
-  case 310: /* base_type: tERRORSTATUST  */
+  case 309: /* base_type: tFLOAT  */
 #line 912 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5214 "tools/widl/parser.tab.c"
+#line 5217 "tools/widl/parser.tab.c"
     break;
 
-  case 311: /* base_type: tHANDLET  */
+  case 310: /* base_type: tDOUBLE  */
 #line 913 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
-#line 5220 "tools/widl/parser.tab.c"
+#line 5223 "tools/widl/parser.tab.c"
     break;
 
-  case 314: /* int_std: tINT  */
-#line 920 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT, 0); }
-#line 5226 "tools/widl/parser.tab.c"
+  case 311: /* base_type: tBOOLEAN  */
+#line 914 "tools/widl/parser.y"
+                                                { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
+#line 5229 "tools/widl/parser.tab.c"
     break;
 
-  case 315: /* int_std: tSHORT m_int  */
-#line 921 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT16, 0); }
-#line 5232 "tools/widl/parser.tab.c"
+  case 312: /* base_type: tERRORSTATUST  */
+#line 915 "tools/widl/parser.y"
+                                                { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
+#line 5235 "tools/widl/parser.tab.c"
     break;
 
-  case 316: /* int_std: tSMALL  */
-#line 922 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT8, 0); }
-#line 5238 "tools/widl/parser.tab.c"
+  case 313: /* base_type: tHANDLET  */
+#line 916 "tools/widl/parser.y"
+                                                { (yyval.type) = find_type_or_error(NULL, (yyvsp[0].str)); }
+#line 5241 "tools/widl/parser.tab.c"
     break;
 
-  case 317: /* int_std: tLONG m_int  */
+  case 316: /* int_std: tINT  */
 #line 923 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_LONG, 0); }
-#line 5244 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT, 0); }
+#line 5247 "tools/widl/parser.tab.c"
     break;
 
-  case 318: /* int_std: tHYPER m_int  */
+  case 317: /* int_std: tSHORT m_int  */
 #line 924 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_HYPER, 0); }
-#line 5250 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT16, 0); }
+#line 5253 "tools/widl/parser.tab.c"
     break;
 
-  case 319: /* int_std: tINT64  */
+  case 318: /* int_std: tSMALL  */
 #line 925 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT64, 0); }
-#line 5256 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT8, 0); }
+#line 5259 "tools/widl/parser.tab.c"
     break;
 
-  case 320: /* int_std: tCHAR  */
+  case 319: /* int_std: tLONG m_int  */
 #line 926 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_CHAR, 0); }
-#line 5262 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_LONG, 0); }
+#line 5265 "tools/widl/parser.tab.c"
     break;
 
-  case 321: /* int_std: tINT32  */
+  case 320: /* int_std: tHYPER m_int  */
 #line 927 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT32, 0); }
-#line 5268 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_HYPER, 0); }
+#line 5271 "tools/widl/parser.tab.c"
     break;
 
-  case 322: /* int_std: tINT3264  */
+  case 321: /* int_std: tINT64  */
 #line 928 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT64, 0); }
+#line 5277 "tools/widl/parser.tab.c"
+    break;
+
+  case 322: /* int_std: tCHAR  */
+#line 929 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_CHAR, 0); }
+#line 5283 "tools/widl/parser.tab.c"
+    break;
+
+  case 323: /* int_std: tINT32  */
+#line 930 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT32, 0); }
+#line 5289 "tools/widl/parser.tab.c"
+    break;
+
+  case 324: /* int_std: tINT3264  */
+#line 931 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_int(TYPE_BASIC_INT3264, 0); }
-#line 5274 "tools/widl/parser.tab.c"
+#line 5295 "tools/widl/parser.tab.c"
     break;
 
-  case 323: /* namespace_pfx: aIDENTIFIER '.'  */
-#line 932 "tools/widl/parser.y"
+  case 325: /* namespace_pfx: aIDENTIFIER '.'  */
+#line 935 "tools/widl/parser.y"
                                                 { (yyval.namespace) = find_namespace_or_error(&global_namespace, (yyvsp[-1].str)); }
-#line 5280 "tools/widl/parser.tab.c"
+#line 5301 "tools/widl/parser.tab.c"
     break;
 
-  case 324: /* namespace_pfx: namespace_pfx aIDENTIFIER '.'  */
-#line 933 "tools/widl/parser.y"
+  case 326: /* namespace_pfx: namespace_pfx aIDENTIFIER '.'  */
+#line 936 "tools/widl/parser.y"
                                                 { (yyval.namespace) = find_namespace_or_error((yyvsp[-2].namespace), (yyvsp[-1].str)); }
-#line 5286 "tools/widl/parser.tab.c"
+#line 5307 "tools/widl/parser.tab.c"
     break;
 
-  case 325: /* qualified_type: typename  */
-#line 937 "tools/widl/parser.y"
+  case 327: /* qualified_type: typename  */
+#line 940 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error(current_namespace, (yyvsp[0].str)); }
-#line 5292 "tools/widl/parser.tab.c"
+#line 5313 "tools/widl/parser.tab.c"
     break;
 
-  case 326: /* qualified_type: namespace_pfx typename  */
-#line 938 "tools/widl/parser.y"
+  case 328: /* qualified_type: namespace_pfx typename  */
+#line 941 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type_or_error((yyvsp[-1].namespace), (yyvsp[0].str)); }
-#line 5298 "tools/widl/parser.tab.c"
+#line 5319 "tools/widl/parser.tab.c"
     break;
 
-  case 327: /* parameterized_type: qualified_type '<' parameterized_type_args '>'  */
-#line 942 "tools/widl/parser.y"
+  case 329: /* parameterized_type: qualified_type '<' parameterized_type_args '>'  */
+#line 945 "tools/widl/parser.y"
                                                 { (yyval.type) = find_parameterized_type((yyvsp[-3].type), (yyvsp[-1].typeref_list)); }
-#line 5304 "tools/widl/parser.tab.c"
+#line 5325 "tools/widl/parser.tab.c"
     break;
 
-  case 328: /* parameterized_type_arg: base_type  */
-#line 946 "tools/widl/parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); }
-#line 5310 "tools/widl/parser.tab.c"
-    break;
-
-  case 329: /* parameterized_type_arg: qualified_type  */
-#line 947 "tools/widl/parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); }
-#line 5316 "tools/widl/parser.tab.c"
-    break;
-
-  case 330: /* parameterized_type_arg: qualified_type '*'  */
-#line 948 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_pointer((yyvsp[-1].type)); }
-#line 5322 "tools/widl/parser.tab.c"
-    break;
-
-  case 331: /* parameterized_type_arg: parameterized_type  */
+  case 330: /* parameterized_type_arg: base_type  */
 #line 949 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 5328 "tools/widl/parser.tab.c"
+#line 5331 "tools/widl/parser.tab.c"
     break;
 
-  case 332: /* parameterized_type_arg: parameterized_type '*'  */
+  case 331: /* parameterized_type_arg: qualified_type  */
 #line 950 "tools/widl/parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 5337 "tools/widl/parser.tab.c"
+    break;
+
+  case 332: /* parameterized_type_arg: qualified_type '*'  */
+#line 951 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_pointer((yyvsp[-1].type)); }
-#line 5334 "tools/widl/parser.tab.c"
+#line 5343 "tools/widl/parser.tab.c"
     break;
 
-  case 333: /* parameterized_type_args: parameterized_type_arg  */
-#line 954 "tools/widl/parser.y"
+  case 333: /* parameterized_type_arg: parameterized_type  */
+#line 952 "tools/widl/parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 5349 "tools/widl/parser.tab.c"
+    break;
+
+  case 334: /* parameterized_type_arg: parameterized_type '*'  */
+#line 953 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_pointer((yyvsp[-1].type)); }
+#line 5355 "tools/widl/parser.tab.c"
+    break;
+
+  case 335: /* parameterized_type_args: parameterized_type_arg  */
+#line 957 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); }
-#line 5340 "tools/widl/parser.tab.c"
+#line 5361 "tools/widl/parser.tab.c"
     break;
 
-  case 334: /* parameterized_type_args: parameterized_type_args ',' parameterized_type_arg  */
-#line 956 "tools/widl/parser.y"
-                                                { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); }
-#line 5346 "tools/widl/parser.tab.c"
-    break;
-
-  case 335: /* coclass: tCOCLASS typename  */
+  case 336: /* parameterized_type_args: parameterized_type_args ',' parameterized_type_arg  */
 #line 959 "tools/widl/parser.y"
+                                                { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); }
+#line 5367 "tools/widl/parser.tab.c"
+    break;
+
+  case 337: /* coclass: tCOCLASS typename  */
+#line 962 "tools/widl/parser.y"
                                                 { (yyval.type) = type_coclass_declare((yyvsp[0].str)); }
-#line 5352 "tools/widl/parser.tab.c"
+#line 5373 "tools/widl/parser.tab.c"
     break;
 
-  case 336: /* coclassdef: attributes coclass '{' class_interfaces '}' semicolon_opt  */
-#line 963 "tools/widl/parser.y"
-                                                { (yyval.type) = type_coclass_define((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].typeref_list)); }
-#line 5358 "tools/widl/parser.tab.c"
-    break;
-
-  case 337: /* runtimeclass: tRUNTIMECLASS typename  */
+  case 338: /* coclassdef: attributes coclass '{' class_interfaces '}' semicolon_opt  */
 #line 966 "tools/widl/parser.y"
+                                                { (yyval.type) = type_coclass_define((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].typeref_list)); }
+#line 5379 "tools/widl/parser.tab.c"
+    break;
+
+  case 339: /* runtimeclass: tRUNTIMECLASS typename  */
+#line 969 "tools/widl/parser.y"
                                                 { (yyval.type) = type_runtimeclass_declare((yyvsp[0].str), current_namespace); }
-#line 5364 "tools/widl/parser.tab.c"
+#line 5385 "tools/widl/parser.tab.c"
     break;
 
-  case 338: /* runtimeclass_def: attributes runtimeclass '{' class_interfaces '}' semicolon_opt  */
-#line 970 "tools/widl/parser.y"
-                                                { (yyval.type) = type_runtimeclass_define((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].typeref_list)); }
-#line 5370 "tools/widl/parser.tab.c"
-    break;
-
-  case 339: /* apicontract: tAPICONTRACT typename  */
+  case 340: /* runtimeclass_def: attributes runtimeclass '{' class_interfaces '}' semicolon_opt  */
 #line 973 "tools/widl/parser.y"
+                                                { (yyval.type) = type_runtimeclass_define((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].typeref_list)); }
+#line 5391 "tools/widl/parser.tab.c"
+    break;
+
+  case 341: /* apicontract: tAPICONTRACT typename  */
+#line 976 "tools/widl/parser.y"
                                                 { (yyval.type) = type_apicontract_declare((yyvsp[0].str), current_namespace); }
-#line 5376 "tools/widl/parser.tab.c"
+#line 5397 "tools/widl/parser.tab.c"
     break;
 
-  case 340: /* apicontract_def: attributes apicontract '{' '}' semicolon_opt  */
-#line 977 "tools/widl/parser.y"
-                                                { (yyval.type) = type_apicontract_define((yyvsp[-3].type), (yyvsp[-4].attr_list)); }
-#line 5382 "tools/widl/parser.tab.c"
-    break;
-
-  case 341: /* namespacedef: tNAMESPACE aIDENTIFIER  */
+  case 342: /* apicontract_def: attributes apicontract '{' '}' semicolon_opt  */
 #line 980 "tools/widl/parser.y"
-                                                { (yyval.str) = (yyvsp[0].str); }
-#line 5388 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = type_apicontract_define((yyvsp[-3].type), (yyvsp[-4].attr_list)); }
+#line 5403 "tools/widl/parser.tab.c"
     break;
 
-  case 342: /* class_interfaces: %empty  */
+  case 343: /* namespacedef: tNAMESPACE aIDENTIFIER  */
 #line 983 "tools/widl/parser.y"
-                                                { (yyval.typeref_list) = NULL; }
-#line 5394 "tools/widl/parser.tab.c"
+                                                { (yyval.str) = (yyvsp[0].str); }
+#line 5409 "tools/widl/parser.tab.c"
     break;
 
-  case 343: /* class_interfaces: class_interfaces class_interface  */
-#line 984 "tools/widl/parser.y"
+  case 344: /* class_interfaces: %empty  */
+#line 986 "tools/widl/parser.y"
+                                                { (yyval.typeref_list) = NULL; }
+#line 5415 "tools/widl/parser.tab.c"
+    break;
+
+  case 345: /* class_interfaces: class_interfaces class_interface  */
+#line 987 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = append_typeref( (yyvsp[-1].typeref_list), (yyvsp[0].typeref) ); }
-#line 5400 "tools/widl/parser.tab.c"
+#line 5421 "tools/widl/parser.tab.c"
     break;
 
-  case 344: /* class_interface: m_attributes interfaceref ';'  */
-#line 988 "tools/widl/parser.y"
+  case 346: /* class_interface: m_attributes interfaceref ';'  */
+#line 991 "tools/widl/parser.y"
                                                 { (yyval.typeref) = make_typeref((yyvsp[-1].type)); (yyval.typeref)->attrs = (yyvsp[-2].attr_list); }
-#line 5406 "tools/widl/parser.tab.c"
+#line 5427 "tools/widl/parser.tab.c"
     break;
 
-  case 345: /* class_interface: m_attributes dispinterfaceref ';'  */
-#line 989 "tools/widl/parser.y"
-                                                { (yyval.typeref) = make_typeref((yyvsp[-1].type)); (yyval.typeref)->attrs = (yyvsp[-2].attr_list); }
-#line 5412 "tools/widl/parser.tab.c"
-    break;
-
-  case 346: /* dispinterface: tDISPINTERFACE typename  */
+  case 347: /* class_interface: m_attributes dispinterfaceref ';'  */
 #line 992 "tools/widl/parser.y"
-                                                { (yyval.type) = type_dispinterface_declare((yyvsp[0].str)); }
-#line 5418 "tools/widl/parser.tab.c"
+                                                { (yyval.typeref) = make_typeref((yyvsp[-1].type)); (yyval.typeref)->attrs = (yyvsp[-2].attr_list); }
+#line 5433 "tools/widl/parser.tab.c"
     break;
 
-  case 347: /* dispattributes: attributes  */
+  case 348: /* dispinterface: tDISPINTERFACE typename  */
 #line 995 "tools/widl/parser.y"
-                                                { (yyval.attr_list) = append_attr((yyvsp[0].attr_list), make_attr(ATTR_DISPINTERFACE)); }
-#line 5424 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = type_dispinterface_declare((yyvsp[0].str)); }
+#line 5439 "tools/widl/parser.tab.c"
     break;
 
-  case 348: /* dispint_props: tPROPERTIES ':'  */
+  case 349: /* dispattributes: attributes  */
 #line 998 "tools/widl/parser.y"
+                                                { (yyval.attr_list) = append_attr((yyvsp[0].attr_list), make_attr(ATTR_DISPINTERFACE)); }
+#line 5445 "tools/widl/parser.tab.c"
+    break;
+
+  case 350: /* dispint_props: tPROPERTIES ':'  */
+#line 1001 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 5430 "tools/widl/parser.tab.c"
+#line 5451 "tools/widl/parser.tab.c"
     break;
 
-  case 349: /* dispint_props: dispint_props s_field ';'  */
-#line 999 "tools/widl/parser.y"
-                                                { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); }
-#line 5436 "tools/widl/parser.tab.c"
-    break;
-
-  case 350: /* dispint_meths: tMETHODS ':'  */
+  case 351: /* dispint_props: dispint_props s_field ';'  */
 #line 1002 "tools/widl/parser.y"
-                                                { (yyval.var_list) = NULL; }
-#line 5442 "tools/widl/parser.tab.c"
-    break;
-
-  case 351: /* dispint_meths: dispint_meths funcdef ';'  */
-#line 1003 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); }
-#line 5448 "tools/widl/parser.tab.c"
+#line 5457 "tools/widl/parser.tab.c"
     break;
 
-  case 352: /* dispinterfacedef: dispattributes dispinterface '{' dispint_props dispint_meths '}'  */
-#line 1008 "tools/widl/parser.y"
+  case 352: /* dispint_meths: tMETHODS ':'  */
+#line 1005 "tools/widl/parser.y"
+                                                { (yyval.var_list) = NULL; }
+#line 5463 "tools/widl/parser.tab.c"
+    break;
+
+  case 353: /* dispint_meths: dispint_meths funcdef ';'  */
+#line 1006 "tools/widl/parser.y"
+                                                { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); }
+#line 5469 "tools/widl/parser.tab.c"
+    break;
+
+  case 354: /* dispinterfacedef: dispattributes dispinterface '{' dispint_props dispint_meths '}'  */
+#line 1011 "tools/widl/parser.y"
                                                 { (yyval.type) = type_dispinterface_define((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].var_list), (yyvsp[-1].var_list)); }
-#line 5454 "tools/widl/parser.tab.c"
+#line 5475 "tools/widl/parser.tab.c"
     break;
 
-  case 353: /* dispinterfacedef: dispattributes dispinterface '{' interface ';' '}'  */
-#line 1010 "tools/widl/parser.y"
-                                                { (yyval.type) = type_dispinterface_define_from_iface((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].type)); }
-#line 5460 "tools/widl/parser.tab.c"
-    break;
-
-  case 354: /* inherit: %empty  */
+  case 355: /* dispinterfacedef: dispattributes dispinterface '{' interface ';' '}'  */
 #line 1013 "tools/widl/parser.y"
+                                                { (yyval.type) = type_dispinterface_define_from_iface((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].type)); }
+#line 5481 "tools/widl/parser.tab.c"
+    break;
+
+  case 356: /* inherit: %empty  */
+#line 1016 "tools/widl/parser.y"
                                                 { (yyval.type) = NULL; }
-#line 5466 "tools/widl/parser.tab.c"
+#line 5487 "tools/widl/parser.tab.c"
     break;
 
-  case 355: /* inherit: ':' qualified_type  */
-#line 1014 "tools/widl/parser.y"
+  case 357: /* inherit: ':' qualified_type  */
+#line 1017 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 5472 "tools/widl/parser.tab.c"
+#line 5493 "tools/widl/parser.tab.c"
     break;
 
-  case 356: /* inherit: ':' parameterized_type  */
-#line 1015 "tools/widl/parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); }
-#line 5478 "tools/widl/parser.tab.c"
-    break;
-
-  case 357: /* type_parameter: typename  */
+  case 358: /* inherit: ':' parameterized_type  */
 #line 1018 "tools/widl/parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 5499 "tools/widl/parser.tab.c"
+    break;
+
+  case 359: /* type_parameter: typename  */
+#line 1021 "tools/widl/parser.y"
                                                 { (yyval.type) = get_type(TYPE_PARAMETER, (yyvsp[0].str), parameters_namespace, 0); }
-#line 5484 "tools/widl/parser.tab.c"
+#line 5505 "tools/widl/parser.tab.c"
     break;
 
-  case 358: /* type_parameters: type_parameter  */
-#line 1022 "tools/widl/parser.y"
+  case 360: /* type_parameters: type_parameter  */
+#line 1025 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); }
-#line 5490 "tools/widl/parser.tab.c"
+#line 5511 "tools/widl/parser.tab.c"
     break;
 
-  case 359: /* type_parameters: type_parameters ',' type_parameter  */
-#line 1023 "tools/widl/parser.y"
+  case 361: /* type_parameters: type_parameters ',' type_parameter  */
+#line 1026 "tools/widl/parser.y"
                                                 { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); }
-#line 5496 "tools/widl/parser.tab.c"
+#line 5517 "tools/widl/parser.tab.c"
     break;
 
-  case 360: /* interface: tINTERFACE typename  */
-#line 1027 "tools/widl/parser.y"
+  case 362: /* interface: tINTERFACE typename  */
+#line 1030 "tools/widl/parser.y"
                                                 { (yyval.type) = type_interface_declare((yyvsp[0].str), current_namespace); }
-#line 5502 "tools/widl/parser.tab.c"
+#line 5523 "tools/widl/parser.tab.c"
     break;
 
-  case 361: /* $@3: %empty  */
-#line 1028 "tools/widl/parser.y"
+  case 363: /* $@3: %empty  */
+#line 1031 "tools/widl/parser.y"
                                   { push_parameters_namespace((yyvsp[-1].str)); }
-#line 5508 "tools/widl/parser.tab.c"
+#line 5529 "tools/widl/parser.tab.c"
     break;
 
-  case 362: /* $@4: %empty  */
-#line 1028 "tools/widl/parser.y"
+  case 364: /* $@4: %empty  */
+#line 1031 "tools/widl/parser.y"
                                                                                      { pop_parameters_namespace((yyvsp[-3].str)); }
-#line 5514 "tools/widl/parser.tab.c"
+#line 5535 "tools/widl/parser.tab.c"
     break;
 
-  case 363: /* interface: tINTERFACE typename '<' $@3 type_parameters $@4 '>'  */
-#line 1029 "tools/widl/parser.y"
+  case 365: /* interface: tINTERFACE typename '<' $@3 type_parameters $@4 '>'  */
+#line 1032 "tools/widl/parser.y"
                                                 { (yyval.type) = type_parameterized_interface_declare((yyvsp[-5].str), current_namespace, (yyvsp[-2].typeref_list)); }
-#line 5520 "tools/widl/parser.tab.c"
+#line 5541 "tools/widl/parser.tab.c"
     break;
 
-  case 364: /* required_types: qualified_type  */
-#line 1033 "tools/widl/parser.y"
-                                                { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); }
-#line 5526 "tools/widl/parser.tab.c"
-    break;
-
-  case 365: /* required_types: parameterized_type  */
-#line 1034 "tools/widl/parser.y"
-                                                { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); }
-#line 5532 "tools/widl/parser.tab.c"
-    break;
-
-  case 366: /* required_types: required_types ',' qualified_type  */
-#line 1035 "tools/widl/parser.y"
-                                                { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); }
-#line 5538 "tools/widl/parser.tab.c"
-    break;
-
-  case 367: /* required_types: required_types ',' parameterized_type  */
+  case 366: /* delegatedef: m_attributes tDELEGATE type ident '(' m_args ')' semicolon_opt  */
 #line 1036 "tools/widl/parser.y"
-                                                { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); }
-#line 5544 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = type_delegate_declare((yyvsp[-4].var)->name, current_namespace);
+						  (yyval.type) = type_delegate_define((yyval.type), (yyvsp[-7].attr_list), append_statement(NULL, make_statement_delegate((yyvsp[-5].type), (yyvsp[-2].var_list))));
+						}
+#line 5549 "tools/widl/parser.tab.c"
     break;
 
-  case 368: /* requires: %empty  */
-#line 1038 "tools/widl/parser.y"
-                                                { (yyval.typeref_list) = NULL; }
-#line 5550 "tools/widl/parser.tab.c"
+  case 367: /* $@5: %empty  */
+#line 1040 "tools/widl/parser.y"
+              { push_parameters_namespace((yyvsp[-1].var)->name); }
+#line 5555 "tools/widl/parser.tab.c"
     break;
 
-  case 369: /* requires: tREQUIRES required_types  */
-#line 1039 "tools/widl/parser.y"
-                                                { (yyval.typeref_list) = (yyvsp[0].typeref_list); }
-#line 5556 "tools/widl/parser.tab.c"
+  case 368: /* $@6: %empty  */
+#line 1041 "tools/widl/parser.y"
+                         { pop_parameters_namespace((yyvsp[-7].var)->name); }
+#line 5561 "tools/widl/parser.tab.c"
     break;
 
-  case 370: /* $@5: %empty  */
+  case 369: /* delegatedef: m_attributes tDELEGATE type ident '<' $@5 type_parameters '>' '(' m_args ')' $@6 semicolon_opt  */
 #line 1042 "tools/widl/parser.y"
-                                                { if ((yyvsp[0].type)->type_type == TYPE_PARAMETERIZED_TYPE) push_parameters_namespace((yyvsp[0].type)->name); }
-#line 5562 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = type_parameterized_delegate_declare((yyvsp[-9].var)->name, current_namespace, (yyvsp[-6].typeref_list));
+						  (yyval.type) = type_parameterized_delegate_define((yyval.type), (yyvsp[-12].attr_list), append_statement(NULL, make_statement_delegate((yyvsp[-10].type), (yyvsp[-3].var_list))));
+						}
+#line 5569 "tools/widl/parser.tab.c"
     break;
 
-  case 371: /* interfacedef: attributes interface $@5 inherit requires '{' int_statements '}' semicolon_opt  */
-#line 1044 "tools/widl/parser.y"
+  case 370: /* required_types: qualified_type  */
+#line 1048 "tools/widl/parser.y"
+                                                { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); }
+#line 5575 "tools/widl/parser.tab.c"
+    break;
+
+  case 371: /* required_types: parameterized_type  */
+#line 1049 "tools/widl/parser.y"
+                                                { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); }
+#line 5581 "tools/widl/parser.tab.c"
+    break;
+
+  case 372: /* required_types: required_types ',' qualified_type  */
+#line 1050 "tools/widl/parser.y"
+                                                { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); }
+#line 5587 "tools/widl/parser.tab.c"
+    break;
+
+  case 373: /* required_types: required_types ',' parameterized_type  */
+#line 1051 "tools/widl/parser.y"
+                                                { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); }
+#line 5593 "tools/widl/parser.tab.c"
+    break;
+
+  case 374: /* requires: %empty  */
+#line 1053 "tools/widl/parser.y"
+                                                { (yyval.typeref_list) = NULL; }
+#line 5599 "tools/widl/parser.tab.c"
+    break;
+
+  case 375: /* requires: tREQUIRES required_types  */
+#line 1054 "tools/widl/parser.y"
+                                                { (yyval.typeref_list) = (yyvsp[0].typeref_list); }
+#line 5605 "tools/widl/parser.tab.c"
+    break;
+
+  case 376: /* $@7: %empty  */
+#line 1057 "tools/widl/parser.y"
+                                                { if ((yyvsp[0].type)->type_type == TYPE_PARAMETERIZED_TYPE) push_parameters_namespace((yyvsp[0].type)->name); }
+#line 5611 "tools/widl/parser.tab.c"
+    break;
+
+  case 377: /* interfacedef: attributes interface $@7 inherit requires '{' int_statements '}' semicolon_opt  */
+#line 1059 "tools/widl/parser.y"
                                                 { if ((yyvsp[-7].type)->type_type == TYPE_PARAMETERIZED_TYPE)
 						  {
 						      (yyval.type) = type_parameterized_interface_define((yyvsp[-7].type), (yyvsp[-8].attr_list), (yyvsp[-5].type), (yyvsp[-2].stmt_list), (yyvsp[-4].typeref_list));
@@ -5574,637 +5623,637 @@
 						      check_async_uuid((yyval.type));
 						  }
 						}
-#line 5578 "tools/widl/parser.tab.c"
+#line 5627 "tools/widl/parser.tab.c"
     break;
 
-  case 372: /* interfacedef: dispinterfacedef semicolon_opt  */
-#line 1055 "tools/widl/parser.y"
+  case 378: /* interfacedef: dispinterfacedef semicolon_opt  */
+#line 1070 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[-1].type); }
-#line 5584 "tools/widl/parser.tab.c"
+#line 5633 "tools/widl/parser.tab.c"
     break;
 
-  case 373: /* interfaceref: tINTERFACE typename  */
-#line 1059 "tools/widl/parser.y"
+  case 379: /* interfaceref: tINTERFACE typename  */
+#line 1074 "tools/widl/parser.y"
                                                 { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
-#line 5590 "tools/widl/parser.tab.c"
+#line 5639 "tools/widl/parser.tab.c"
     break;
 
-  case 374: /* interfaceref: tINTERFACE namespace_pfx typename  */
-#line 1060 "tools/widl/parser.y"
-                                                { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), (yyvsp[-1].namespace), 0); }
-#line 5596 "tools/widl/parser.tab.c"
-    break;
-
-  case 375: /* dispinterfaceref: tDISPINTERFACE typename  */
-#line 1064 "tools/widl/parser.y"
-                                                { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
-#line 5602 "tools/widl/parser.tab.c"
-    break;
-
-  case 376: /* module: tMODULE typename  */
-#line 1067 "tools/widl/parser.y"
-                                                { (yyval.type) = type_module_declare((yyvsp[0].str)); }
-#line 5608 "tools/widl/parser.tab.c"
-    break;
-
-  case 377: /* moduledef: attributes module '{' int_statements '}' semicolon_opt  */
-#line 1071 "tools/widl/parser.y"
-                                                { (yyval.type) = type_module_define((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].stmt_list)); }
-#line 5614 "tools/widl/parser.tab.c"
-    break;
-
-  case 378: /* storage_cls_spec: tEXTERN  */
+  case 380: /* interfaceref: tINTERFACE namespace_pfx typename  */
 #line 1075 "tools/widl/parser.y"
+                                                { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), (yyvsp[-1].namespace), 0); }
+#line 5645 "tools/widl/parser.tab.c"
+    break;
+
+  case 381: /* dispinterfaceref: tDISPINTERFACE typename  */
+#line 1079 "tools/widl/parser.y"
+                                                { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
+#line 5651 "tools/widl/parser.tab.c"
+    break;
+
+  case 382: /* module: tMODULE typename  */
+#line 1082 "tools/widl/parser.y"
+                                                { (yyval.type) = type_module_declare((yyvsp[0].str)); }
+#line 5657 "tools/widl/parser.tab.c"
+    break;
+
+  case 383: /* moduledef: attributes module '{' int_statements '}' semicolon_opt  */
+#line 1086 "tools/widl/parser.y"
+                                                { (yyval.type) = type_module_define((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].stmt_list)); }
+#line 5663 "tools/widl/parser.tab.c"
+    break;
+
+  case 384: /* storage_cls_spec: tEXTERN  */
+#line 1090 "tools/widl/parser.y"
                                                 { (yyval.stgclass) = STG_EXTERN; }
-#line 5620 "tools/widl/parser.tab.c"
+#line 5669 "tools/widl/parser.tab.c"
     break;
 
-  case 379: /* storage_cls_spec: tSTATIC  */
-#line 1076 "tools/widl/parser.y"
+  case 385: /* storage_cls_spec: tSTATIC  */
+#line 1091 "tools/widl/parser.y"
                                                 { (yyval.stgclass) = STG_STATIC; }
-#line 5626 "tools/widl/parser.tab.c"
+#line 5675 "tools/widl/parser.tab.c"
     break;
 
-  case 380: /* storage_cls_spec: tREGISTER  */
-#line 1077 "tools/widl/parser.y"
-                                                { (yyval.stgclass) = STG_REGISTER; }
-#line 5632 "tools/widl/parser.tab.c"
-    break;
-
-  case 381: /* function_specifier: tINLINE  */
-#line 1081 "tools/widl/parser.y"
-                                                { (yyval.function_specifier) = FUNCTION_SPECIFIER_INLINE; }
-#line 5638 "tools/widl/parser.tab.c"
-    break;
-
-  case 382: /* type_qualifier: tCONST  */
-#line 1085 "tools/widl/parser.y"
-                                                { (yyval.type_qualifier) = TYPE_QUALIFIER_CONST; }
-#line 5644 "tools/widl/parser.tab.c"
-    break;
-
-  case 383: /* m_type_qual_list: %empty  */
-#line 1088 "tools/widl/parser.y"
-                                                { (yyval.type_qualifier) = 0; }
-#line 5650 "tools/widl/parser.tab.c"
-    break;
-
-  case 384: /* m_type_qual_list: m_type_qual_list type_qualifier  */
-#line 1089 "tools/widl/parser.y"
-                                                { (yyval.type_qualifier) = (yyvsp[-1].type_qualifier) | (yyvsp[0].type_qualifier); }
-#line 5656 "tools/widl/parser.tab.c"
-    break;
-
-  case 385: /* decl_spec: type m_decl_spec_no_type  */
+  case 386: /* storage_cls_spec: tREGISTER  */
 #line 1092 "tools/widl/parser.y"
-                                                { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[0].declspec), NULL, STG_NONE, 0, 0); }
-#line 5662 "tools/widl/parser.tab.c"
+                                                { (yyval.stgclass) = STG_REGISTER; }
+#line 5681 "tools/widl/parser.tab.c"
     break;
 
-  case 386: /* decl_spec: decl_spec_no_type type m_decl_spec_no_type  */
-#line 1094 "tools/widl/parser.y"
-                                                { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[-2].declspec), (yyvsp[0].declspec), STG_NONE, 0, 0); }
-#line 5668 "tools/widl/parser.tab.c"
+  case 387: /* function_specifier: tINLINE  */
+#line 1096 "tools/widl/parser.y"
+                                                { (yyval.function_specifier) = FUNCTION_SPECIFIER_INLINE; }
+#line 5687 "tools/widl/parser.tab.c"
     break;
 
-  case 387: /* unqualified_decl_spec: unqualified_type m_decl_spec_no_type  */
-#line 1098 "tools/widl/parser.y"
-                                                { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[0].declspec), NULL, STG_NONE, 0, 0); }
-#line 5674 "tools/widl/parser.tab.c"
-    break;
-
-  case 388: /* unqualified_decl_spec: decl_spec_no_type unqualified_type m_decl_spec_no_type  */
+  case 388: /* type_qualifier: tCONST  */
 #line 1100 "tools/widl/parser.y"
-                                                { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[-2].declspec), (yyvsp[0].declspec), STG_NONE, 0, 0); }
-#line 5680 "tools/widl/parser.tab.c"
+                                                { (yyval.type_qualifier) = TYPE_QUALIFIER_CONST; }
+#line 5693 "tools/widl/parser.tab.c"
     break;
 
-  case 389: /* m_decl_spec_no_type: %empty  */
+  case 389: /* m_type_qual_list: %empty  */
 #line 1103 "tools/widl/parser.y"
-                                                { (yyval.declspec) = NULL; }
-#line 5686 "tools/widl/parser.tab.c"
+                                                { (yyval.type_qualifier) = 0; }
+#line 5699 "tools/widl/parser.tab.c"
     break;
 
-  case 391: /* decl_spec_no_type: type_qualifier m_decl_spec_no_type  */
-#line 1108 "tools/widl/parser.y"
-                                                { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, (yyvsp[-1].type_qualifier), 0); }
-#line 5692 "tools/widl/parser.tab.c"
+  case 390: /* m_type_qual_list: m_type_qual_list type_qualifier  */
+#line 1104 "tools/widl/parser.y"
+                                                { (yyval.type_qualifier) = (yyvsp[-1].type_qualifier) | (yyvsp[0].type_qualifier); }
+#line 5705 "tools/widl/parser.tab.c"
     break;
 
-  case 392: /* decl_spec_no_type: function_specifier m_decl_spec_no_type  */
+  case 391: /* decl_spec: type m_decl_spec_no_type  */
+#line 1107 "tools/widl/parser.y"
+                                                { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[0].declspec), NULL, STG_NONE, 0, 0); }
+#line 5711 "tools/widl/parser.tab.c"
+    break;
+
+  case 392: /* decl_spec: decl_spec_no_type type m_decl_spec_no_type  */
 #line 1109 "tools/widl/parser.y"
-                                                  { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, 0, (yyvsp[-1].function_specifier)); }
-#line 5698 "tools/widl/parser.tab.c"
+                                                { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[-2].declspec), (yyvsp[0].declspec), STG_NONE, 0, 0); }
+#line 5717 "tools/widl/parser.tab.c"
     break;
 
-  case 393: /* decl_spec_no_type: storage_cls_spec m_decl_spec_no_type  */
-#line 1110 "tools/widl/parser.y"
-                                                { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, (yyvsp[-1].stgclass), 0, 0); }
-#line 5704 "tools/widl/parser.tab.c"
+  case 393: /* unqualified_decl_spec: unqualified_type m_decl_spec_no_type  */
+#line 1113 "tools/widl/parser.y"
+                                                { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[0].declspec), NULL, STG_NONE, 0, 0); }
+#line 5723 "tools/widl/parser.tab.c"
     break;
 
-  case 394: /* declarator: '*' m_type_qual_list declarator  */
+  case 394: /* unqualified_decl_spec: decl_spec_no_type unqualified_type m_decl_spec_no_type  */
 #line 1115 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5710 "tools/widl/parser.tab.c"
+                                                { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[-2].declspec), (yyvsp[0].declspec), STG_NONE, 0, 0); }
+#line 5729 "tools/widl/parser.tab.c"
     break;
 
-  case 395: /* declarator: callconv declarator  */
-#line 1116 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5716 "tools/widl/parser.tab.c"
+  case 395: /* m_decl_spec_no_type: %empty  */
+#line 1118 "tools/widl/parser.y"
+                                                { (yyval.declspec) = NULL; }
+#line 5735 "tools/widl/parser.tab.c"
     break;
 
-  case 397: /* direct_declarator: ident  */
-#line 1121 "tools/widl/parser.y"
-                                                { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
-#line 5722 "tools/widl/parser.tab.c"
-    break;
-
-  case 398: /* direct_declarator: '(' declarator ')'  */
-#line 1122 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
-#line 5728 "tools/widl/parser.tab.c"
-    break;
-
-  case 399: /* direct_declarator: direct_declarator array  */
+  case 397: /* decl_spec_no_type: type_qualifier m_decl_spec_no_type  */
 #line 1123 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5734 "tools/widl/parser.tab.c"
+                                                { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, (yyvsp[-1].type_qualifier), 0); }
+#line 5741 "tools/widl/parser.tab.c"
     break;
 
-  case 400: /* direct_declarator: direct_declarator '(' m_args ')'  */
+  case 398: /* decl_spec_no_type: function_specifier m_decl_spec_no_type  */
 #line 1124 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[-3].declarator); append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0); }
-#line 5740 "tools/widl/parser.tab.c"
+                                                  { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, 0, (yyvsp[-1].function_specifier)); }
+#line 5747 "tools/widl/parser.tab.c"
     break;
 
-  case 401: /* abstract_declarator: '*' m_type_qual_list m_abstract_declarator  */
+  case 399: /* decl_spec_no_type: storage_cls_spec m_decl_spec_no_type  */
+#line 1125 "tools/widl/parser.y"
+                                                { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, (yyvsp[-1].stgclass), 0, 0); }
+#line 5753 "tools/widl/parser.tab.c"
+    break;
+
+  case 400: /* declarator: '*' m_type_qual_list declarator  */
 #line 1130 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5746 "tools/widl/parser.tab.c"
+#line 5759 "tools/widl/parser.tab.c"
     break;
 
-  case 402: /* abstract_declarator: callconv m_abstract_declarator  */
+  case 401: /* declarator: callconv declarator  */
 #line 1131 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5752 "tools/widl/parser.tab.c"
+#line 5765 "tools/widl/parser.tab.c"
     break;
 
-  case 404: /* abstract_declarator_no_direct: '*' m_type_qual_list m_any_declarator  */
-#line 1138 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5758 "tools/widl/parser.tab.c"
-    break;
-
-  case 405: /* abstract_declarator_no_direct: callconv m_any_declarator  */
-#line 1139 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5764 "tools/widl/parser.tab.c"
-    break;
-
-  case 406: /* m_abstract_declarator: %empty  */
-#line 1143 "tools/widl/parser.y"
-                                                { (yyval.declarator) = make_declarator(NULL); }
-#line 5770 "tools/widl/parser.tab.c"
-    break;
-
-  case 408: /* abstract_direct_declarator: '(' abstract_declarator_no_direct ')'  */
-#line 1149 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
-#line 5776 "tools/widl/parser.tab.c"
-    break;
-
-  case 409: /* abstract_direct_declarator: abstract_direct_declarator array  */
-#line 1150 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5782 "tools/widl/parser.tab.c"
-    break;
-
-  case 410: /* abstract_direct_declarator: array  */
-#line 1151 "tools/widl/parser.y"
-                                                { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5788 "tools/widl/parser.tab.c"
-    break;
-
-  case 411: /* abstract_direct_declarator: '(' m_args ')'  */
-#line 1153 "tools/widl/parser.y"
-                                                { (yyval.declarator) = make_declarator(NULL);
-						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
-						}
-#line 5796 "tools/widl/parser.tab.c"
-    break;
-
-  case 412: /* abstract_direct_declarator: abstract_direct_declarator '(' m_args ')'  */
-#line 1157 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[-3].declarator);
-						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
-						}
-#line 5804 "tools/widl/parser.tab.c"
-    break;
-
-  case 413: /* any_declarator: '*' m_type_qual_list m_any_declarator  */
-#line 1165 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5810 "tools/widl/parser.tab.c"
-    break;
-
-  case 414: /* any_declarator: callconv m_any_declarator  */
-#line 1166 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5816 "tools/widl/parser.tab.c"
-    break;
-
-  case 416: /* any_declarator_no_direct: '*' m_type_qual_list m_any_declarator  */
-#line 1173 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5822 "tools/widl/parser.tab.c"
-    break;
-
-  case 417: /* any_declarator_no_direct: callconv m_any_declarator  */
-#line 1174 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5828 "tools/widl/parser.tab.c"
-    break;
-
-  case 418: /* m_any_declarator: %empty  */
-#line 1178 "tools/widl/parser.y"
-                                                { (yyval.declarator) = make_declarator(NULL); }
-#line 5834 "tools/widl/parser.tab.c"
-    break;
-
-  case 420: /* any_direct_declarator: ident  */
-#line 1186 "tools/widl/parser.y"
+  case 403: /* direct_declarator: ident  */
+#line 1136 "tools/widl/parser.y"
                                                 { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
-#line 5840 "tools/widl/parser.tab.c"
+#line 5771 "tools/widl/parser.tab.c"
     break;
 
-  case 421: /* any_direct_declarator: '(' any_declarator_no_direct ')'  */
-#line 1187 "tools/widl/parser.y"
+  case 404: /* direct_declarator: '(' declarator ')'  */
+#line 1137 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-1].declarator); }
-#line 5846 "tools/widl/parser.tab.c"
+#line 5777 "tools/widl/parser.tab.c"
     break;
 
-  case 422: /* any_direct_declarator: any_direct_declarator array  */
-#line 1188 "tools/widl/parser.y"
+  case 405: /* direct_declarator: direct_declarator array  */
+#line 1138 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5852 "tools/widl/parser.tab.c"
+#line 5783 "tools/widl/parser.tab.c"
     break;
 
-  case 423: /* any_direct_declarator: array  */
-#line 1189 "tools/widl/parser.y"
+  case 406: /* direct_declarator: direct_declarator '(' m_args ')'  */
+#line 1139 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[-3].declarator); append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0); }
+#line 5789 "tools/widl/parser.tab.c"
+    break;
+
+  case 407: /* abstract_declarator: '*' m_type_qual_list m_abstract_declarator  */
+#line 1145 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 5795 "tools/widl/parser.tab.c"
+    break;
+
+  case 408: /* abstract_declarator: callconv m_abstract_declarator  */
+#line 1146 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 5801 "tools/widl/parser.tab.c"
+    break;
+
+  case 410: /* abstract_declarator_no_direct: '*' m_type_qual_list m_any_declarator  */
+#line 1153 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 5807 "tools/widl/parser.tab.c"
+    break;
+
+  case 411: /* abstract_declarator_no_direct: callconv m_any_declarator  */
+#line 1154 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 5813 "tools/widl/parser.tab.c"
+    break;
+
+  case 412: /* m_abstract_declarator: %empty  */
+#line 1158 "tools/widl/parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL); }
+#line 5819 "tools/widl/parser.tab.c"
+    break;
+
+  case 414: /* abstract_direct_declarator: '(' abstract_declarator_no_direct ')'  */
+#line 1164 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
+#line 5825 "tools/widl/parser.tab.c"
+    break;
+
+  case 415: /* abstract_direct_declarator: abstract_direct_declarator array  */
+#line 1165 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
+#line 5831 "tools/widl/parser.tab.c"
+    break;
+
+  case 416: /* abstract_direct_declarator: array  */
+#line 1166 "tools/widl/parser.y"
                                                 { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5858 "tools/widl/parser.tab.c"
+#line 5837 "tools/widl/parser.tab.c"
     break;
 
-  case 424: /* any_direct_declarator: '(' m_args ')'  */
-#line 1191 "tools/widl/parser.y"
+  case 417: /* abstract_direct_declarator: '(' m_args ')'  */
+#line 1168 "tools/widl/parser.y"
                                                 { (yyval.declarator) = make_declarator(NULL);
 						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
 						}
-#line 5866 "tools/widl/parser.tab.c"
+#line 5845 "tools/widl/parser.tab.c"
     break;
 
-  case 425: /* any_direct_declarator: any_direct_declarator '(' m_args ')'  */
-#line 1195 "tools/widl/parser.y"
+  case 418: /* abstract_direct_declarator: abstract_direct_declarator '(' m_args ')'  */
+#line 1172 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-3].declarator);
 						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
 						}
-#line 5874 "tools/widl/parser.tab.c"
+#line 5853 "tools/widl/parser.tab.c"
     break;
 
-  case 426: /* declarator_list: declarator  */
+  case 419: /* any_declarator: '*' m_type_qual_list m_any_declarator  */
+#line 1180 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 5859 "tools/widl/parser.tab.c"
+    break;
+
+  case 420: /* any_declarator: callconv m_any_declarator  */
+#line 1181 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 5865 "tools/widl/parser.tab.c"
+    break;
+
+  case 422: /* any_declarator_no_direct: '*' m_type_qual_list m_any_declarator  */
+#line 1188 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 5871 "tools/widl/parser.tab.c"
+    break;
+
+  case 423: /* any_declarator_no_direct: callconv m_any_declarator  */
+#line 1189 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 5877 "tools/widl/parser.tab.c"
+    break;
+
+  case 424: /* m_any_declarator: %empty  */
+#line 1193 "tools/widl/parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL); }
+#line 5883 "tools/widl/parser.tab.c"
+    break;
+
+  case 426: /* any_direct_declarator: ident  */
 #line 1201 "tools/widl/parser.y"
-                                                { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
-#line 5880 "tools/widl/parser.tab.c"
+                                                { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
+#line 5889 "tools/widl/parser.tab.c"
     break;
 
-  case 427: /* declarator_list: declarator_list ',' declarator  */
+  case 427: /* any_direct_declarator: '(' any_declarator_no_direct ')'  */
 #line 1202 "tools/widl/parser.y"
-                                                { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
-#line 5886 "tools/widl/parser.tab.c"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
+#line 5895 "tools/widl/parser.tab.c"
     break;
 
-  case 428: /* m_bitfield: %empty  */
-#line 1205 "tools/widl/parser.y"
-                                                { (yyval.expr) = NULL; }
-#line 5892 "tools/widl/parser.tab.c"
+  case 428: /* any_direct_declarator: any_direct_declarator array  */
+#line 1203 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
+#line 5901 "tools/widl/parser.tab.c"
     break;
 
-  case 429: /* m_bitfield: ':' expr_const  */
+  case 429: /* any_direct_declarator: array  */
+#line 1204 "tools/widl/parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
+#line 5907 "tools/widl/parser.tab.c"
+    break;
+
+  case 430: /* any_direct_declarator: '(' m_args ')'  */
 #line 1206 "tools/widl/parser.y"
-                                                { (yyval.expr) = (yyvsp[0].expr); }
-#line 5898 "tools/widl/parser.tab.c"
+                                                { (yyval.declarator) = make_declarator(NULL);
+						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
+						}
+#line 5915 "tools/widl/parser.tab.c"
     break;
 
-  case 430: /* struct_declarator: any_declarator m_bitfield  */
-#line 1209 "tools/widl/parser.y"
+  case 431: /* any_direct_declarator: any_direct_declarator '(' m_args ')'  */
+#line 1210 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[-3].declarator);
+						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
+						}
+#line 5923 "tools/widl/parser.tab.c"
+    break;
+
+  case 432: /* declarator_list: declarator  */
+#line 1216 "tools/widl/parser.y"
+                                                { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
+#line 5929 "tools/widl/parser.tab.c"
+    break;
+
+  case 433: /* declarator_list: declarator_list ',' declarator  */
+#line 1217 "tools/widl/parser.y"
+                                                { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
+#line 5935 "tools/widl/parser.tab.c"
+    break;
+
+  case 434: /* m_bitfield: %empty  */
+#line 1220 "tools/widl/parser.y"
+                                                { (yyval.expr) = NULL; }
+#line 5941 "tools/widl/parser.tab.c"
+    break;
+
+  case 435: /* m_bitfield: ':' expr_const  */
+#line 1221 "tools/widl/parser.y"
+                                                { (yyval.expr) = (yyvsp[0].expr); }
+#line 5947 "tools/widl/parser.tab.c"
+    break;
+
+  case 436: /* struct_declarator: any_declarator m_bitfield  */
+#line 1224 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-1].declarator); (yyval.declarator)->bits = (yyvsp[0].expr);
 						  if (!(yyval.declarator)->bits && !(yyval.declarator)->var->name)
 						    error_loc("unnamed fields are not allowed\n");
 						}
-#line 5907 "tools/widl/parser.tab.c"
+#line 5956 "tools/widl/parser.tab.c"
     break;
 
-  case 431: /* struct_declarator_list: struct_declarator  */
-#line 1216 "tools/widl/parser.y"
-                                                { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
-#line 5913 "tools/widl/parser.tab.c"
-    break;
-
-  case 432: /* struct_declarator_list: struct_declarator_list ',' struct_declarator  */
-#line 1218 "tools/widl/parser.y"
-                                                { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
-#line 5919 "tools/widl/parser.tab.c"
-    break;
-
-  case 433: /* init_declarator: declarator  */
-#line 1222 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); }
-#line 5925 "tools/widl/parser.tab.c"
-    break;
-
-  case 434: /* init_declarator: declarator '=' expr_const  */
-#line 1223 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[-2].declarator); (yyvsp[-2].declarator)->var->eval = (yyvsp[0].expr); }
-#line 5931 "tools/widl/parser.tab.c"
-    break;
-
-  case 435: /* threading_type: tAPARTMENT  */
-#line 1227 "tools/widl/parser.y"
-                                                { (yyval.num) = THREADING_APARTMENT; }
-#line 5937 "tools/widl/parser.tab.c"
-    break;
-
-  case 436: /* threading_type: tNEUTRAL  */
-#line 1228 "tools/widl/parser.y"
-                                                { (yyval.num) = THREADING_NEUTRAL; }
-#line 5943 "tools/widl/parser.tab.c"
-    break;
-
-  case 437: /* threading_type: tSINGLE  */
-#line 1229 "tools/widl/parser.y"
-                                                { (yyval.num) = THREADING_SINGLE; }
-#line 5949 "tools/widl/parser.tab.c"
-    break;
-
-  case 438: /* threading_type: tFREE  */
-#line 1230 "tools/widl/parser.y"
-                                                { (yyval.num) = THREADING_FREE; }
-#line 5955 "tools/widl/parser.tab.c"
-    break;
-
-  case 439: /* threading_type: tBOTH  */
+  case 437: /* struct_declarator_list: struct_declarator  */
 #line 1231 "tools/widl/parser.y"
-                                                { (yyval.num) = THREADING_BOTH; }
-#line 5961 "tools/widl/parser.tab.c"
+                                                { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
+#line 5962 "tools/widl/parser.tab.c"
     break;
 
-  case 440: /* threading_type: tMTA  */
-#line 1232 "tools/widl/parser.y"
-                                                { (yyval.num) = THREADING_FREE; }
-#line 5967 "tools/widl/parser.tab.c"
+  case 438: /* struct_declarator_list: struct_declarator_list ',' struct_declarator  */
+#line 1233 "tools/widl/parser.y"
+                                                { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
+#line 5968 "tools/widl/parser.tab.c"
     break;
 
-  case 441: /* pointer_type: tREF  */
-#line 1236 "tools/widl/parser.y"
-                                                { (yyval.num) = FC_RP; }
-#line 5973 "tools/widl/parser.tab.c"
-    break;
-
-  case 442: /* pointer_type: tUNIQUE  */
+  case 439: /* init_declarator: declarator  */
 #line 1237 "tools/widl/parser.y"
-                                                { (yyval.num) = FC_UP; }
-#line 5979 "tools/widl/parser.tab.c"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); }
+#line 5974 "tools/widl/parser.tab.c"
     break;
 
-  case 443: /* pointer_type: tPTR  */
+  case 440: /* init_declarator: declarator '=' expr_const  */
 #line 1238 "tools/widl/parser.y"
-                                                { (yyval.num) = FC_FP; }
-#line 5985 "tools/widl/parser.tab.c"
+                                                { (yyval.declarator) = (yyvsp[-2].declarator); (yyvsp[-2].declarator)->var->eval = (yyvsp[0].expr); }
+#line 5980 "tools/widl/parser.tab.c"
     break;
 
-  case 444: /* structdef: tSTRUCT m_typename '{' fields '}'  */
-#line 1241 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_struct((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
-#line 5991 "tools/widl/parser.tab.c"
+  case 441: /* threading_type: tAPARTMENT  */
+#line 1242 "tools/widl/parser.y"
+                                                { (yyval.num) = THREADING_APARTMENT; }
+#line 5986 "tools/widl/parser.tab.c"
     break;
 
-  case 445: /* unqualified_type: tVOID  */
+  case 442: /* threading_type: tNEUTRAL  */
+#line 1243 "tools/widl/parser.y"
+                                                { (yyval.num) = THREADING_NEUTRAL; }
+#line 5992 "tools/widl/parser.tab.c"
+    break;
+
+  case 443: /* threading_type: tSINGLE  */
+#line 1244 "tools/widl/parser.y"
+                                                { (yyval.num) = THREADING_SINGLE; }
+#line 5998 "tools/widl/parser.tab.c"
+    break;
+
+  case 444: /* threading_type: tFREE  */
 #line 1245 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_void(); }
-#line 5997 "tools/widl/parser.tab.c"
+                                                { (yyval.num) = THREADING_FREE; }
+#line 6004 "tools/widl/parser.tab.c"
     break;
 
-  case 446: /* unqualified_type: base_type  */
+  case 445: /* threading_type: tBOTH  */
 #line 1246 "tools/widl/parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); }
-#line 6003 "tools/widl/parser.tab.c"
+                                                { (yyval.num) = THREADING_BOTH; }
+#line 6010 "tools/widl/parser.tab.c"
     break;
 
-  case 447: /* unqualified_type: enumdef  */
+  case 446: /* threading_type: tMTA  */
 #line 1247 "tools/widl/parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); }
-#line 6009 "tools/widl/parser.tab.c"
+                                                { (yyval.num) = THREADING_FREE; }
+#line 6016 "tools/widl/parser.tab.c"
     break;
 
-  case 448: /* unqualified_type: tENUM aIDENTIFIER  */
-#line 1248 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 6015 "tools/widl/parser.tab.c"
-    break;
-
-  case 449: /* unqualified_type: structdef  */
-#line 1249 "tools/widl/parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); }
-#line 6021 "tools/widl/parser.tab.c"
-    break;
-
-  case 450: /* unqualified_type: tSTRUCT aIDENTIFIER  */
-#line 1250 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 6027 "tools/widl/parser.tab.c"
-    break;
-
-  case 451: /* unqualified_type: uniondef  */
+  case 447: /* pointer_type: tREF  */
 #line 1251 "tools/widl/parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); }
-#line 6033 "tools/widl/parser.tab.c"
+                                                { (yyval.num) = FC_RP; }
+#line 6022 "tools/widl/parser.tab.c"
     break;
 
-  case 452: /* unqualified_type: tUNION aIDENTIFIER  */
+  case 448: /* pointer_type: tUNIQUE  */
 #line 1252 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
-#line 6039 "tools/widl/parser.tab.c"
+                                                { (yyval.num) = FC_UP; }
+#line 6028 "tools/widl/parser.tab.c"
     break;
 
-  case 453: /* unqualified_type: tSAFEARRAY '(' type ')'  */
+  case 449: /* pointer_type: tPTR  */
 #line 1253 "tools/widl/parser.y"
-                                                { (yyval.type) = make_safearray((yyvsp[-1].type)); }
-#line 6045 "tools/widl/parser.tab.c"
+                                                { (yyval.num) = FC_FP; }
+#line 6034 "tools/widl/parser.tab.c"
     break;
 
-  case 454: /* unqualified_type: aKNOWNTYPE  */
-#line 1254 "tools/widl/parser.y"
-                                                { (yyval.type) = find_type_or_error(current_namespace, (yyvsp[0].str)); }
-#line 6051 "tools/widl/parser.tab.c"
+  case 450: /* structdef: tSTRUCT m_typename '{' fields '}'  */
+#line 1256 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_struct((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
+#line 6040 "tools/widl/parser.tab.c"
     break;
 
-  case 456: /* type: namespace_pfx typename  */
-#line 1259 "tools/widl/parser.y"
-                                                { (yyval.type) = find_type_or_error((yyvsp[-1].namespace), (yyvsp[0].str)); }
-#line 6057 "tools/widl/parser.tab.c"
-    break;
-
-  case 457: /* type: parameterized_type  */
+  case 451: /* unqualified_type: tVOID  */
 #line 1260 "tools/widl/parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); }
-#line 6063 "tools/widl/parser.tab.c"
+                                                { (yyval.type) = type_new_void(); }
+#line 6046 "tools/widl/parser.tab.c"
     break;
 
-  case 458: /* typedef: m_attributes tTYPEDEF m_attributes decl_spec declarator_list  */
+  case 452: /* unqualified_type: base_type  */
+#line 1261 "tools/widl/parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 6052 "tools/widl/parser.tab.c"
+    break;
+
+  case 453: /* unqualified_type: enumdef  */
+#line 1262 "tools/widl/parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 6058 "tools/widl/parser.tab.c"
+    break;
+
+  case 454: /* unqualified_type: tENUM aIDENTIFIER  */
+#line 1263 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
+#line 6064 "tools/widl/parser.tab.c"
+    break;
+
+  case 455: /* unqualified_type: structdef  */
 #line 1264 "tools/widl/parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 6070 "tools/widl/parser.tab.c"
+    break;
+
+  case 456: /* unqualified_type: tSTRUCT aIDENTIFIER  */
+#line 1265 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
+#line 6076 "tools/widl/parser.tab.c"
+    break;
+
+  case 457: /* unqualified_type: uniondef  */
+#line 1266 "tools/widl/parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 6082 "tools/widl/parser.tab.c"
+    break;
+
+  case 458: /* unqualified_type: tUNION aIDENTIFIER  */
+#line 1267 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
+#line 6088 "tools/widl/parser.tab.c"
+    break;
+
+  case 459: /* unqualified_type: tSAFEARRAY '(' type ')'  */
+#line 1268 "tools/widl/parser.y"
+                                                { (yyval.type) = make_safearray((yyvsp[-1].type)); }
+#line 6094 "tools/widl/parser.tab.c"
+    break;
+
+  case 460: /* unqualified_type: aKNOWNTYPE  */
+#line 1269 "tools/widl/parser.y"
+                                                { (yyval.type) = find_type_or_error(current_namespace, (yyvsp[0].str)); }
+#line 6100 "tools/widl/parser.tab.c"
+    break;
+
+  case 462: /* type: namespace_pfx typename  */
+#line 1274 "tools/widl/parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[-1].namespace), (yyvsp[0].str)); }
+#line 6106 "tools/widl/parser.tab.c"
+    break;
+
+  case 463: /* type: parameterized_type  */
+#line 1275 "tools/widl/parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 6112 "tools/widl/parser.tab.c"
+    break;
+
+  case 464: /* typedef: m_attributes tTYPEDEF m_attributes decl_spec declarator_list  */
+#line 1279 "tools/widl/parser.y"
                                                 { (yyvsp[-4].attr_list) = append_attribs((yyvsp[-4].attr_list), (yyvsp[-2].attr_list));
 						  reg_typedefs((yyvsp[-1].declspec), (yyvsp[0].declarator_list), check_typedef_attrs((yyvsp[-4].attr_list)));
 						  (yyval.statement) = make_statement_typedef((yyvsp[0].declarator_list), !(yyvsp[-1].declspec)->type->defined);
 						}
-#line 6072 "tools/widl/parser.tab.c"
+#line 6121 "tools/widl/parser.tab.c"
     break;
 
-  case 459: /* uniondef: tUNION m_typename '{' ne_union_fields '}'  */
-#line 1271 "tools/widl/parser.y"
+  case 465: /* uniondef: tUNION m_typename '{' ne_union_fields '}'  */
+#line 1286 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_nonencapsulated_union((yyvsp[-3].str), TRUE, (yyvsp[-1].var_list)); }
-#line 6078 "tools/widl/parser.tab.c"
+#line 6127 "tools/widl/parser.tab.c"
     break;
 
-  case 460: /* uniondef: tUNION m_typename tSWITCH '(' s_field ')' m_ident '{' cases '}'  */
-#line 1274 "tools/widl/parser.y"
+  case 466: /* uniondef: tUNION m_typename tSWITCH '(' s_field ')' m_ident '{' cases '}'  */
+#line 1289 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_encapsulated_union((yyvsp[-8].str), (yyvsp[-5].var), (yyvsp[-3].var), (yyvsp[-1].var_list)); }
-#line 6084 "tools/widl/parser.tab.c"
+#line 6133 "tools/widl/parser.tab.c"
     break;
 
-  case 461: /* version: aNUM  */
-#line 1278 "tools/widl/parser.y"
+  case 467: /* version: aNUM  */
+#line 1293 "tools/widl/parser.y"
                                                 { (yyval.num) = MAKEVERSION((yyvsp[0].num), 0); }
-#line 6090 "tools/widl/parser.tab.c"
+#line 6139 "tools/widl/parser.tab.c"
     break;
 
-  case 462: /* version: aNUM '.' aNUM  */
-#line 1279 "tools/widl/parser.y"
+  case 468: /* version: aNUM '.' aNUM  */
+#line 1294 "tools/widl/parser.y"
                                                 { (yyval.num) = MAKEVERSION((yyvsp[-2].num), (yyvsp[0].num)); }
-#line 6096 "tools/widl/parser.tab.c"
+#line 6145 "tools/widl/parser.tab.c"
     break;
 
-  case 463: /* version: aHEXNUM  */
-#line 1280 "tools/widl/parser.y"
-                                                { (yyval.num) = (yyvsp[0].num); }
-#line 6102 "tools/widl/parser.tab.c"
-    break;
-
-  case 468: /* acf_int_statement: tTYPEDEF acf_attributes aKNOWNTYPE ';'  */
+  case 469: /* version: aHEXNUM  */
 #line 1295 "tools/widl/parser.y"
+                                                { (yyval.num) = (yyvsp[0].num); }
+#line 6151 "tools/widl/parser.tab.c"
+    break;
+
+  case 474: /* acf_int_statement: tTYPEDEF acf_attributes aKNOWNTYPE ';'  */
+#line 1310 "tools/widl/parser.y"
                                                 { type_t *type = find_type_or_error(current_namespace, (yyvsp[-1].str));
                                                   type->attrs = append_attr_list(type->attrs, (yyvsp[-2].attr_list));
                                                 }
-#line 6110 "tools/widl/parser.tab.c"
+#line 6159 "tools/widl/parser.tab.c"
     break;
 
-  case 469: /* acf_interface: acf_attributes tINTERFACE aKNOWNTYPE '{' acf_int_statements '}'  */
-#line 1302 "tools/widl/parser.y"
+  case 475: /* acf_interface: acf_attributes tINTERFACE aKNOWNTYPE '{' acf_int_statements '}'  */
+#line 1317 "tools/widl/parser.y"
                                                 {  type_t *iface = find_type_or_error(current_namespace, (yyvsp[-3].str));
                                                    if (type_get_type(iface) != TYPE_INTERFACE)
                                                        error_loc("%s is not an interface\n", iface->name);
                                                    iface->attrs = append_attr_list(iface->attrs, (yyvsp[-5].attr_list));
                                                 }
-#line 6120 "tools/widl/parser.tab.c"
+#line 6169 "tools/widl/parser.tab.c"
     break;
 
-  case 470: /* acf_attributes: %empty  */
-#line 1310 "tools/widl/parser.y"
+  case 476: /* acf_attributes: %empty  */
+#line 1325 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = NULL; }
-#line 6126 "tools/widl/parser.tab.c"
+#line 6175 "tools/widl/parser.tab.c"
     break;
 
-  case 471: /* acf_attributes: '[' acf_attribute_list ']'  */
-#line 1311 "tools/widl/parser.y"
+  case 477: /* acf_attributes: '[' acf_attribute_list ']'  */
+#line 1326 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = (yyvsp[-1].attr_list); }
-#line 6132 "tools/widl/parser.tab.c"
+#line 6181 "tools/widl/parser.tab.c"
     break;
 
-  case 472: /* acf_attribute_list: acf_attribute  */
-#line 1315 "tools/widl/parser.y"
-                                                { (yyval.attr_list) = append_attr(NULL, (yyvsp[0].attr)); }
-#line 6138 "tools/widl/parser.tab.c"
-    break;
-
-  case 473: /* acf_attribute_list: acf_attribute_list ',' acf_attribute  */
-#line 1316 "tools/widl/parser.y"
-                                                { (yyval.attr_list) = append_attr((yyvsp[-2].attr_list), (yyvsp[0].attr)); }
-#line 6144 "tools/widl/parser.tab.c"
-    break;
-
-  case 474: /* acf_attribute: tALLOCATE '(' allocate_option_list ')'  */
-#line 1321 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_ALLOCATE, (yyvsp[-1].num)); }
-#line 6150 "tools/widl/parser.tab.c"
-    break;
-
-  case 475: /* acf_attribute: tENCODE  */
-#line 1322 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_ENCODE); }
-#line 6156 "tools/widl/parser.tab.c"
-    break;
-
-  case 476: /* acf_attribute: tDECODE  */
-#line 1323 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DECODE); }
-#line 6162 "tools/widl/parser.tab.c"
-    break;
-
-  case 477: /* acf_attribute: tEXPLICITHANDLE  */
-#line 1324 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
-#line 6168 "tools/widl/parser.tab.c"
-    break;
-
-  case 478: /* allocate_option_list: allocate_option  */
-#line 1328 "tools/widl/parser.y"
-                                                { (yyval.num) = (yyvsp[0].num); }
-#line 6174 "tools/widl/parser.tab.c"
-    break;
-
-  case 479: /* allocate_option_list: allocate_option_list ',' allocate_option  */
+  case 478: /* acf_attribute_list: acf_attribute  */
 #line 1330 "tools/widl/parser.y"
-                                                { (yyval.num) = (yyvsp[-2].num) | (yyvsp[0].num); }
-#line 6180 "tools/widl/parser.tab.c"
+                                                { (yyval.attr_list) = append_attr(NULL, (yyvsp[0].attr)); }
+#line 6187 "tools/widl/parser.tab.c"
     break;
 
-  case 480: /* allocate_option: tDONTFREE  */
-#line 1334 "tools/widl/parser.y"
-                                                { (yyval.num) = FC_DONT_FREE; }
-#line 6186 "tools/widl/parser.tab.c"
+  case 479: /* acf_attribute_list: acf_attribute_list ',' acf_attribute  */
+#line 1331 "tools/widl/parser.y"
+                                                { (yyval.attr_list) = append_attr((yyvsp[-2].attr_list), (yyvsp[0].attr)); }
+#line 6193 "tools/widl/parser.tab.c"
     break;
 
-  case 481: /* allocate_option: tFREE  */
-#line 1335 "tools/widl/parser.y"
-                                                { (yyval.num) = 0; }
-#line 6192 "tools/widl/parser.tab.c"
-    break;
-
-  case 482: /* allocate_option: tALLNODES  */
+  case 480: /* acf_attribute: tALLOCATE '(' allocate_option_list ')'  */
 #line 1336 "tools/widl/parser.y"
-                                                { (yyval.num) = FC_ALLOCATE_ALL_NODES; }
-#line 6198 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_ALLOCATE, (yyvsp[-1].num)); }
+#line 6199 "tools/widl/parser.tab.c"
     break;
 
-  case 483: /* allocate_option: tSINGLENODE  */
+  case 481: /* acf_attribute: tENCODE  */
 #line 1337 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_ENCODE); }
+#line 6205 "tools/widl/parser.tab.c"
+    break;
+
+  case 482: /* acf_attribute: tDECODE  */
+#line 1338 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_DECODE); }
+#line 6211 "tools/widl/parser.tab.c"
+    break;
+
+  case 483: /* acf_attribute: tEXPLICITHANDLE  */
+#line 1339 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
+#line 6217 "tools/widl/parser.tab.c"
+    break;
+
+  case 484: /* allocate_option_list: allocate_option  */
+#line 1343 "tools/widl/parser.y"
+                                                { (yyval.num) = (yyvsp[0].num); }
+#line 6223 "tools/widl/parser.tab.c"
+    break;
+
+  case 485: /* allocate_option_list: allocate_option_list ',' allocate_option  */
+#line 1345 "tools/widl/parser.y"
+                                                { (yyval.num) = (yyvsp[-2].num) | (yyvsp[0].num); }
+#line 6229 "tools/widl/parser.tab.c"
+    break;
+
+  case 486: /* allocate_option: tDONTFREE  */
+#line 1349 "tools/widl/parser.y"
+                                                { (yyval.num) = FC_DONT_FREE; }
+#line 6235 "tools/widl/parser.tab.c"
+    break;
+
+  case 487: /* allocate_option: tFREE  */
+#line 1350 "tools/widl/parser.y"
                                                 { (yyval.num) = 0; }
-#line 6204 "tools/widl/parser.tab.c"
+#line 6241 "tools/widl/parser.tab.c"
+    break;
+
+  case 488: /* allocate_option: tALLNODES  */
+#line 1351 "tools/widl/parser.y"
+                                                { (yyval.num) = FC_ALLOCATE_ALL_NODES; }
+#line 6247 "tools/widl/parser.tab.c"
+    break;
+
+  case 489: /* allocate_option: tSINGLENODE  */
+#line 1352 "tools/widl/parser.y"
+                                                { (yyval.num) = 0; }
+#line 6253 "tools/widl/parser.tab.c"
     break;
 
 
-#line 6208 "tools/widl/parser.tab.c"
+#line 6257 "tools/widl/parser.tab.c"
 
       default: break;
     }
@@ -6429,7 +6478,7 @@
   return yyresult;
 }
 
-#line 1340 "tools/widl/parser.y"
+#line 1355 "tools/widl/parser.y"
 
 
 static void decl_builtin_basic(const char *name, enum type_basic_type type)
@@ -6583,7 +6632,7 @@
   return a;
 }
 
-static attr_t *make_attrp(enum attr_type type, void *val)
+attr_t *make_attrp(enum attr_type type, void *val)
 {
   attr_t *a = xmalloc(sizeof(attr_t));
   a->type = type;
@@ -7483,7 +7532,7 @@
     /* ATTR_WIREMARSHAL */         { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "wire_marshal" },
 };
 
-static attr_list_t *append_attr(attr_list_t *list, attr_t *attr)
+attr_list_t *append_attr(attr_list_t *list, attr_t *attr)
 {
     attr_t *attr_existing;
     if (!attr) return list;
@@ -7756,6 +7805,7 @@
     case TYPE_INTERFACE:
     case TYPE_BITFIELD:
     case TYPE_RUNTIMECLASS:
+    case TYPE_DELEGATE:
         return FALSE;
     case TYPE_APICONTRACT:
     case TYPE_PARAMETERIZED_TYPE:
@@ -8392,6 +8442,14 @@
     return stmt;
 }
 
+static statement_t *make_statement_delegate(type_t *ret, var_list_t *args)
+{
+    declarator_t *decl = make_declarator(make_var(xstrdup("Invoke")));
+    decl_spec_t *spec = make_decl_spec(ret, NULL, NULL, STG_NONE, 0, 0);
+    append_chain_type(decl, type_new_function(args), 0);
+    return make_statement_declaration(declare_var(NULL, spec, decl, FALSE));
+}
+
 static statement_list_t *append_statements(statement_list_t *l1, statement_list_t *l2)
 {
     if (!l2) return l1;
diff --git a/mingw-w64-tools/widl/src/parser.tab.h b/mingw-w64-tools/widl/src/parser.tab.h
index 525ad83..36d0920 100644
--- a/mingw-w64-tools/widl/src/parser.tab.h
+++ b/mingw-w64-tools/widl/src/parser.tab.h
@@ -113,153 +113,154 @@
     tDECODE = 314,                 /* tDECODE  */
     tDEFAULT = 315,                /* tDEFAULT  */
     tDEFAULTBIND = 316,            /* tDEFAULTBIND  */
-    tDEFAULTCOLLELEM = 317,        /* tDEFAULTCOLLELEM  */
-    tDEFAULTVALUE = 318,           /* tDEFAULTVALUE  */
-    tDEFAULTVTABLE = 319,          /* tDEFAULTVTABLE  */
-    tDISABLECONSISTENCYCHECK = 320, /* tDISABLECONSISTENCYCHECK  */
-    tDISPLAYBIND = 321,            /* tDISPLAYBIND  */
-    tDISPINTERFACE = 322,          /* tDISPINTERFACE  */
-    tDLLNAME = 323,                /* tDLLNAME  */
-    tDONTFREE = 324,               /* tDONTFREE  */
-    tDOUBLE = 325,                 /* tDOUBLE  */
-    tDUAL = 326,                   /* tDUAL  */
-    tENABLEALLOCATE = 327,         /* tENABLEALLOCATE  */
-    tENCODE = 328,                 /* tENCODE  */
-    tENDPOINT = 329,               /* tENDPOINT  */
-    tENTRY = 330,                  /* tENTRY  */
-    tENUM = 331,                   /* tENUM  */
-    tERRORSTATUST = 332,           /* tERRORSTATUST  */
-    tEVENTADD = 333,               /* tEVENTADD  */
-    tEVENTREMOVE = 334,            /* tEVENTREMOVE  */
-    tEXCLUSIVETO = 335,            /* tEXCLUSIVETO  */
-    tEXPLICITHANDLE = 336,         /* tEXPLICITHANDLE  */
-    tEXTERN = 337,                 /* tEXTERN  */
-    tFALSE = 338,                  /* tFALSE  */
-    tFASTCALL = 339,               /* tFASTCALL  */
-    tFAULTSTATUS = 340,            /* tFAULTSTATUS  */
-    tFLAGS = 341,                  /* tFLAGS  */
-    tFLOAT = 342,                  /* tFLOAT  */
-    tFORCEALLOCATE = 343,          /* tFORCEALLOCATE  */
-    tHANDLE = 344,                 /* tHANDLE  */
-    tHANDLET = 345,                /* tHANDLET  */
-    tHELPCONTEXT = 346,            /* tHELPCONTEXT  */
-    tHELPFILE = 347,               /* tHELPFILE  */
-    tHELPSTRING = 348,             /* tHELPSTRING  */
-    tHELPSTRINGCONTEXT = 349,      /* tHELPSTRINGCONTEXT  */
-    tHELPSTRINGDLL = 350,          /* tHELPSTRINGDLL  */
-    tHIDDEN = 351,                 /* tHIDDEN  */
-    tHYPER = 352,                  /* tHYPER  */
-    tID = 353,                     /* tID  */
-    tIDEMPOTENT = 354,             /* tIDEMPOTENT  */
-    tIGNORE = 355,                 /* tIGNORE  */
-    tIIDIS = 356,                  /* tIIDIS  */
-    tIMMEDIATEBIND = 357,          /* tIMMEDIATEBIND  */
-    tIMPLICITHANDLE = 358,         /* tIMPLICITHANDLE  */
-    tIMPORT = 359,                 /* tIMPORT  */
-    tIMPORTLIB = 360,              /* tIMPORTLIB  */
-    tIN = 361,                     /* tIN  */
-    tIN_LINE = 362,                /* tIN_LINE  */
-    tINLINE = 363,                 /* tINLINE  */
-    tINPUTSYNC = 364,              /* tINPUTSYNC  */
-    tINT = 365,                    /* tINT  */
-    tINT32 = 366,                  /* tINT32  */
-    tINT3264 = 367,                /* tINT3264  */
-    tINT64 = 368,                  /* tINT64  */
-    tINTERFACE = 369,              /* tINTERFACE  */
-    tLCID = 370,                   /* tLCID  */
-    tLENGTHIS = 371,               /* tLENGTHIS  */
-    tLIBRARY = 372,                /* tLIBRARY  */
-    tLICENSED = 373,               /* tLICENSED  */
-    tLOCAL = 374,                  /* tLOCAL  */
-    tLONG = 375,                   /* tLONG  */
-    tMARSHALINGBEHAVIOR = 376,     /* tMARSHALINGBEHAVIOR  */
-    tMAYBE = 377,                  /* tMAYBE  */
-    tMESSAGE = 378,                /* tMESSAGE  */
-    tMETHODS = 379,                /* tMETHODS  */
-    tMODULE = 380,                 /* tMODULE  */
-    tMTA = 381,                    /* tMTA  */
-    tNAMESPACE = 382,              /* tNAMESPACE  */
-    tNOCODE = 383,                 /* tNOCODE  */
-    tNONBROWSABLE = 384,           /* tNONBROWSABLE  */
-    tNONCREATABLE = 385,           /* tNONCREATABLE  */
-    tNONE = 386,                   /* tNONE  */
-    tNONEXTENSIBLE = 387,          /* tNONEXTENSIBLE  */
-    tNOTIFY = 388,                 /* tNOTIFY  */
-    tNOTIFYFLAG = 389,             /* tNOTIFYFLAG  */
-    tNULL = 390,                   /* tNULL  */
-    tOBJECT = 391,                 /* tOBJECT  */
-    tODL = 392,                    /* tODL  */
-    tOLEAUTOMATION = 393,          /* tOLEAUTOMATION  */
-    tOPTIMIZE = 394,               /* tOPTIMIZE  */
-    tOPTIONAL = 395,               /* tOPTIONAL  */
-    tOUT = 396,                    /* tOUT  */
-    tPARTIALIGNORE = 397,          /* tPARTIALIGNORE  */
-    tPASCAL = 398,                 /* tPASCAL  */
-    tPOINTERDEFAULT = 399,         /* tPOINTERDEFAULT  */
-    tPRAGMA_WARNING = 400,         /* tPRAGMA_WARNING  */
-    tPROGID = 401,                 /* tPROGID  */
-    tPROPERTIES = 402,             /* tPROPERTIES  */
-    tPROPGET = 403,                /* tPROPGET  */
-    tPROPPUT = 404,                /* tPROPPUT  */
-    tPROPPUTREF = 405,             /* tPROPPUTREF  */
-    tPROXY = 406,                  /* tPROXY  */
-    tPTR = 407,                    /* tPTR  */
-    tPUBLIC = 408,                 /* tPUBLIC  */
-    tRANGE = 409,                  /* tRANGE  */
-    tREADONLY = 410,               /* tREADONLY  */
-    tREF = 411,                    /* tREF  */
-    tREGISTER = 412,               /* tREGISTER  */
-    tREPRESENTAS = 413,            /* tREPRESENTAS  */
-    tREQUESTEDIT = 414,            /* tREQUESTEDIT  */
-    tREQUIRES = 415,               /* tREQUIRES  */
-    tRESTRICTED = 416,             /* tRESTRICTED  */
-    tRETVAL = 417,                 /* tRETVAL  */
-    tRUNTIMECLASS = 418,           /* tRUNTIMECLASS  */
-    tSAFEARRAY = 419,              /* tSAFEARRAY  */
-    tSHORT = 420,                  /* tSHORT  */
-    tSIGNED = 421,                 /* tSIGNED  */
-    tSINGLENODE = 422,             /* tSINGLENODE  */
-    tSIZEIS = 423,                 /* tSIZEIS  */
-    tSIZEOF = 424,                 /* tSIZEOF  */
-    tSMALL = 425,                  /* tSMALL  */
-    tSOURCE = 426,                 /* tSOURCE  */
-    tSTANDARD = 427,               /* tSTANDARD  */
-    tSTATIC = 428,                 /* tSTATIC  */
-    tSTDCALL = 429,                /* tSTDCALL  */
-    tSTRICTCONTEXTHANDLE = 430,    /* tSTRICTCONTEXTHANDLE  */
-    tSTRING = 431,                 /* tSTRING  */
-    tSTRUCT = 432,                 /* tSTRUCT  */
-    tSWITCH = 433,                 /* tSWITCH  */
-    tSWITCHIS = 434,               /* tSWITCHIS  */
-    tSWITCHTYPE = 435,             /* tSWITCHTYPE  */
-    tTHREADING = 436,              /* tTHREADING  */
-    tTRANSMITAS = 437,             /* tTRANSMITAS  */
-    tTRUE = 438,                   /* tTRUE  */
-    tTYPEDEF = 439,                /* tTYPEDEF  */
-    tUIDEFAULT = 440,              /* tUIDEFAULT  */
-    tUNION = 441,                  /* tUNION  */
-    tUNIQUE = 442,                 /* tUNIQUE  */
-    tUNSIGNED = 443,               /* tUNSIGNED  */
-    tUSESGETLASTERROR = 444,       /* tUSESGETLASTERROR  */
-    tUSERMARSHAL = 445,            /* tUSERMARSHAL  */
-    tUUID = 446,                   /* tUUID  */
-    tV1ENUM = 447,                 /* tV1ENUM  */
-    tVARARG = 448,                 /* tVARARG  */
-    tVERSION = 449,                /* tVERSION  */
-    tVIPROGID = 450,               /* tVIPROGID  */
-    tVOID = 451,                   /* tVOID  */
-    tWCHAR = 452,                  /* tWCHAR  */
-    tWIREMARSHAL = 453,            /* tWIREMARSHAL  */
-    tAPARTMENT = 454,              /* tAPARTMENT  */
-    tNEUTRAL = 455,                /* tNEUTRAL  */
-    tSINGLE = 456,                 /* tSINGLE  */
-    tFREE = 457,                   /* tFREE  */
-    tBOTH = 458,                   /* tBOTH  */
-    CAST = 459,                    /* CAST  */
-    PPTR = 460,                    /* PPTR  */
-    POS = 461,                     /* POS  */
-    NEG = 462,                     /* NEG  */
-    ADDRESSOF = 463                /* ADDRESSOF  */
+    tDELEGATE = 317,               /* tDELEGATE  */
+    tDEFAULTCOLLELEM = 318,        /* tDEFAULTCOLLELEM  */
+    tDEFAULTVALUE = 319,           /* tDEFAULTVALUE  */
+    tDEFAULTVTABLE = 320,          /* tDEFAULTVTABLE  */
+    tDISABLECONSISTENCYCHECK = 321, /* tDISABLECONSISTENCYCHECK  */
+    tDISPLAYBIND = 322,            /* tDISPLAYBIND  */
+    tDISPINTERFACE = 323,          /* tDISPINTERFACE  */
+    tDLLNAME = 324,                /* tDLLNAME  */
+    tDONTFREE = 325,               /* tDONTFREE  */
+    tDOUBLE = 326,                 /* tDOUBLE  */
+    tDUAL = 327,                   /* tDUAL  */
+    tENABLEALLOCATE = 328,         /* tENABLEALLOCATE  */
+    tENCODE = 329,                 /* tENCODE  */
+    tENDPOINT = 330,               /* tENDPOINT  */
+    tENTRY = 331,                  /* tENTRY  */
+    tENUM = 332,                   /* tENUM  */
+    tERRORSTATUST = 333,           /* tERRORSTATUST  */
+    tEVENTADD = 334,               /* tEVENTADD  */
+    tEVENTREMOVE = 335,            /* tEVENTREMOVE  */
+    tEXCLUSIVETO = 336,            /* tEXCLUSIVETO  */
+    tEXPLICITHANDLE = 337,         /* tEXPLICITHANDLE  */
+    tEXTERN = 338,                 /* tEXTERN  */
+    tFALSE = 339,                  /* tFALSE  */
+    tFASTCALL = 340,               /* tFASTCALL  */
+    tFAULTSTATUS = 341,            /* tFAULTSTATUS  */
+    tFLAGS = 342,                  /* tFLAGS  */
+    tFLOAT = 343,                  /* tFLOAT  */
+    tFORCEALLOCATE = 344,          /* tFORCEALLOCATE  */
+    tHANDLE = 345,                 /* tHANDLE  */
+    tHANDLET = 346,                /* tHANDLET  */
+    tHELPCONTEXT = 347,            /* tHELPCONTEXT  */
+    tHELPFILE = 348,               /* tHELPFILE  */
+    tHELPSTRING = 349,             /* tHELPSTRING  */
+    tHELPSTRINGCONTEXT = 350,      /* tHELPSTRINGCONTEXT  */
+    tHELPSTRINGDLL = 351,          /* tHELPSTRINGDLL  */
+    tHIDDEN = 352,                 /* tHIDDEN  */
+    tHYPER = 353,                  /* tHYPER  */
+    tID = 354,                     /* tID  */
+    tIDEMPOTENT = 355,             /* tIDEMPOTENT  */
+    tIGNORE = 356,                 /* tIGNORE  */
+    tIIDIS = 357,                  /* tIIDIS  */
+    tIMMEDIATEBIND = 358,          /* tIMMEDIATEBIND  */
+    tIMPLICITHANDLE = 359,         /* tIMPLICITHANDLE  */
+    tIMPORT = 360,                 /* tIMPORT  */
+    tIMPORTLIB = 361,              /* tIMPORTLIB  */
+    tIN = 362,                     /* tIN  */
+    tIN_LINE = 363,                /* tIN_LINE  */
+    tINLINE = 364,                 /* tINLINE  */
+    tINPUTSYNC = 365,              /* tINPUTSYNC  */
+    tINT = 366,                    /* tINT  */
+    tINT32 = 367,                  /* tINT32  */
+    tINT3264 = 368,                /* tINT3264  */
+    tINT64 = 369,                  /* tINT64  */
+    tINTERFACE = 370,              /* tINTERFACE  */
+    tLCID = 371,                   /* tLCID  */
+    tLENGTHIS = 372,               /* tLENGTHIS  */
+    tLIBRARY = 373,                /* tLIBRARY  */
+    tLICENSED = 374,               /* tLICENSED  */
+    tLOCAL = 375,                  /* tLOCAL  */
+    tLONG = 376,                   /* tLONG  */
+    tMARSHALINGBEHAVIOR = 377,     /* tMARSHALINGBEHAVIOR  */
+    tMAYBE = 378,                  /* tMAYBE  */
+    tMESSAGE = 379,                /* tMESSAGE  */
+    tMETHODS = 380,                /* tMETHODS  */
+    tMODULE = 381,                 /* tMODULE  */
+    tMTA = 382,                    /* tMTA  */
+    tNAMESPACE = 383,              /* tNAMESPACE  */
+    tNOCODE = 384,                 /* tNOCODE  */
+    tNONBROWSABLE = 385,           /* tNONBROWSABLE  */
+    tNONCREATABLE = 386,           /* tNONCREATABLE  */
+    tNONE = 387,                   /* tNONE  */
+    tNONEXTENSIBLE = 388,          /* tNONEXTENSIBLE  */
+    tNOTIFY = 389,                 /* tNOTIFY  */
+    tNOTIFYFLAG = 390,             /* tNOTIFYFLAG  */
+    tNULL = 391,                   /* tNULL  */
+    tOBJECT = 392,                 /* tOBJECT  */
+    tODL = 393,                    /* tODL  */
+    tOLEAUTOMATION = 394,          /* tOLEAUTOMATION  */
+    tOPTIMIZE = 395,               /* tOPTIMIZE  */
+    tOPTIONAL = 396,               /* tOPTIONAL  */
+    tOUT = 397,                    /* tOUT  */
+    tPARTIALIGNORE = 398,          /* tPARTIALIGNORE  */
+    tPASCAL = 399,                 /* tPASCAL  */
+    tPOINTERDEFAULT = 400,         /* tPOINTERDEFAULT  */
+    tPRAGMA_WARNING = 401,         /* tPRAGMA_WARNING  */
+    tPROGID = 402,                 /* tPROGID  */
+    tPROPERTIES = 403,             /* tPROPERTIES  */
+    tPROPGET = 404,                /* tPROPGET  */
+    tPROPPUT = 405,                /* tPROPPUT  */
+    tPROPPUTREF = 406,             /* tPROPPUTREF  */
+    tPROXY = 407,                  /* tPROXY  */
+    tPTR = 408,                    /* tPTR  */
+    tPUBLIC = 409,                 /* tPUBLIC  */
+    tRANGE = 410,                  /* tRANGE  */
+    tREADONLY = 411,               /* tREADONLY  */
+    tREF = 412,                    /* tREF  */
+    tREGISTER = 413,               /* tREGISTER  */
+    tREPRESENTAS = 414,            /* tREPRESENTAS  */
+    tREQUESTEDIT = 415,            /* tREQUESTEDIT  */
+    tREQUIRES = 416,               /* tREQUIRES  */
+    tRESTRICTED = 417,             /* tRESTRICTED  */
+    tRETVAL = 418,                 /* tRETVAL  */
+    tRUNTIMECLASS = 419,           /* tRUNTIMECLASS  */
+    tSAFEARRAY = 420,              /* tSAFEARRAY  */
+    tSHORT = 421,                  /* tSHORT  */
+    tSIGNED = 422,                 /* tSIGNED  */
+    tSINGLENODE = 423,             /* tSINGLENODE  */
+    tSIZEIS = 424,                 /* tSIZEIS  */
+    tSIZEOF = 425,                 /* tSIZEOF  */
+    tSMALL = 426,                  /* tSMALL  */
+    tSOURCE = 427,                 /* tSOURCE  */
+    tSTANDARD = 428,               /* tSTANDARD  */
+    tSTATIC = 429,                 /* tSTATIC  */
+    tSTDCALL = 430,                /* tSTDCALL  */
+    tSTRICTCONTEXTHANDLE = 431,    /* tSTRICTCONTEXTHANDLE  */
+    tSTRING = 432,                 /* tSTRING  */
+    tSTRUCT = 433,                 /* tSTRUCT  */
+    tSWITCH = 434,                 /* tSWITCH  */
+    tSWITCHIS = 435,               /* tSWITCHIS  */
+    tSWITCHTYPE = 436,             /* tSWITCHTYPE  */
+    tTHREADING = 437,              /* tTHREADING  */
+    tTRANSMITAS = 438,             /* tTRANSMITAS  */
+    tTRUE = 439,                   /* tTRUE  */
+    tTYPEDEF = 440,                /* tTYPEDEF  */
+    tUIDEFAULT = 441,              /* tUIDEFAULT  */
+    tUNION = 442,                  /* tUNION  */
+    tUNIQUE = 443,                 /* tUNIQUE  */
+    tUNSIGNED = 444,               /* tUNSIGNED  */
+    tUSESGETLASTERROR = 445,       /* tUSESGETLASTERROR  */
+    tUSERMARSHAL = 446,            /* tUSERMARSHAL  */
+    tUUID = 447,                   /* tUUID  */
+    tV1ENUM = 448,                 /* tV1ENUM  */
+    tVARARG = 449,                 /* tVARARG  */
+    tVERSION = 450,                /* tVERSION  */
+    tVIPROGID = 451,               /* tVIPROGID  */
+    tVOID = 452,                   /* tVOID  */
+    tWCHAR = 453,                  /* tWCHAR  */
+    tWIREMARSHAL = 454,            /* tWIREMARSHAL  */
+    tAPARTMENT = 455,              /* tAPARTMENT  */
+    tNEUTRAL = 456,                /* tNEUTRAL  */
+    tSINGLE = 457,                 /* tSINGLE  */
+    tFREE = 458,                   /* tFREE  */
+    tBOTH = 459,                   /* tBOTH  */
+    CAST = 460,                    /* CAST  */
+    PPTR = 461,                    /* PPTR  */
+    POS = 462,                     /* POS  */
+    NEG = 463,                     /* NEG  */
+    ADDRESSOF = 464                /* ADDRESSOF  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
@@ -268,7 +269,7 @@
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 124 "tools/widl/parser.y"
+#line 123 "tools/widl/parser.y"
 
 	attr_t *attr;
 	attr_list_t *attr_list;
@@ -298,7 +299,7 @@
 	enum function_specifier function_specifier;
 	struct namespace *namespace;
 
-#line 302 "tools/widl/parser.tab.h"
+#line 303 "tools/widl/parser.tab.h"
 
 };
 typedef union YYSTYPE YYSTYPE;
diff --git a/mingw-w64-tools/widl/src/parser.y b/mingw-w64-tools/widl/src/parser.y
index cc84961..4c115ad 100644
--- a/mingw-w64-tools/widl/src/parser.y
+++ b/mingw-w64-tools/widl/src/parser.y
@@ -45,13 +45,11 @@
 };
 
 static str_list_t *append_str(str_list_t *list, char *str);
-static attr_list_t *append_attr(attr_list_t *list, attr_t *attr);
 static attr_list_t *append_attr_list(attr_list_t *new_list, attr_list_t *old_list);
 static decl_spec_t *make_decl_spec(type_t *type, decl_spec_t *left, decl_spec_t *right,
         enum storage_class stgclass, enum type_qualifier qual, enum function_specifier func_specifier);
 static attr_t *make_attr(enum attr_type type);
 static attr_t *make_attrv(enum attr_type type, unsigned int val);
-static attr_t *make_attrp(enum attr_type type, void *val);
 static attr_t *make_custom_attr(UUID *id, expr_t *pval);
 static expr_list_t *append_expr(expr_list_t *list, expr_t *expr);
 static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, declarator_t *decl, int top);
@@ -106,6 +104,7 @@
 static statement_t *make_statement_typedef(var_list_t *names, int declonly);
 static statement_t *make_statement_import(const char *str);
 static statement_t *make_statement_parameterized_type(type_t *type, typeref_list_t *params);
+static statement_t *make_statement_delegate(type_t *ret, var_list_t *args);
 static statement_list_t *append_statement(statement_list_t *list, statement_t *stmt);
 static statement_list_t *append_statements(statement_list_t *, statement_list_t *);
 static attr_list_t *append_attribs(attr_list_t *, attr_list_t *);
@@ -180,6 +179,7 @@
 %token tCUSTOM
 %token tDECLARE
 %token tDECODE tDEFAULT tDEFAULTBIND
+%token tDELEGATE
 %token tDEFAULTCOLLELEM
 %token tDEFAULTVALUE
 %token tDEFAULTVTABLE
@@ -278,6 +278,7 @@
 %type <expr_list> m_exprs /* exprs expr_list */ expr_list_int_const
 %type <expr> contract_req
 %type <expr> static_attr
+%type <type> delegatedef
 %type <stgclass> storage_cls_spec
 %type <type_qualifier> type_qualifier m_type_qual_list
 %type <function_specifier> function_specifier
@@ -384,6 +385,7 @@
 	| gbl_statements interface ';'		{ $$ = append_statement($1, make_statement_reference($2)); }
 	| gbl_statements dispinterface ';'	{ $$ = append_statement($1, make_statement_reference($2)); }
 	| gbl_statements interfacedef		{ $$ = append_statement($1, make_statement_type_decl($2)); }
+	| gbl_statements delegatedef		{ $$ = append_statement($1, make_statement_type_decl($2)); }
 	| gbl_statements coclass ';'		{ $$ = $1;
 						  reg_type($2, $2->name, current_namespace, 0);
 						}
@@ -408,6 +410,7 @@
 	| imp_statements namespacedef '{' { push_namespace($2); } imp_statements '}'
 						{ pop_namespace($2); $$ = append_statements($1, $5); }
 	| imp_statements interfacedef		{ $$ = append_statement($1, make_statement_type_decl($2)); }
+	| imp_statements delegatedef		{ $$ = append_statement($1, make_statement_type_decl($2)); }
 	| imp_statements coclass ';'		{ $$ = $1; reg_type($2, $2->name, current_namespace, 0); }
 	| imp_statements coclassdef		{ $$ = append_statement($1, make_statement_type_decl($2));
 						  reg_type($2, $2->name, current_namespace, 0);
@@ -1029,6 +1032,18 @@
 						{ $$ = type_parameterized_interface_declare($2, current_namespace, $5); }
 	;
 
+delegatedef: m_attributes tDELEGATE type ident '(' m_args ')' semicolon_opt
+						{ $$ = type_delegate_declare($4->name, current_namespace);
+						  $$ = type_delegate_define($$, $1, append_statement(NULL, make_statement_delegate($3, $6)));
+						}
+	| m_attributes tDELEGATE type ident
+	  '<' { push_parameters_namespace($4->name); } type_parameters '>'
+	  '(' m_args ')' { pop_parameters_namespace($4->name); } semicolon_opt
+						{ $$ = type_parameterized_delegate_declare($4->name, current_namespace, $7);
+						  $$ = type_parameterized_delegate_define($$, $1, append_statement(NULL, make_statement_delegate($3, $10)));
+						}
+	;
+
 required_types:
 	  qualified_type			{ $$ = append_typeref(NULL, make_typeref($1)); }
 	| parameterized_type			{ $$ = append_typeref(NULL, make_typeref($1)); }
@@ -1490,7 +1505,7 @@
   return a;
 }
 
-static attr_t *make_attrp(enum attr_type type, void *val)
+attr_t *make_attrp(enum attr_type type, void *val)
 {
   attr_t *a = xmalloc(sizeof(attr_t));
   a->type = type;
@@ -2390,7 +2405,7 @@
     /* ATTR_WIREMARSHAL */         { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "wire_marshal" },
 };
 
-static attr_list_t *append_attr(attr_list_t *list, attr_t *attr)
+attr_list_t *append_attr(attr_list_t *list, attr_t *attr)
 {
     attr_t *attr_existing;
     if (!attr) return list;
@@ -2663,6 +2678,7 @@
     case TYPE_INTERFACE:
     case TYPE_BITFIELD:
     case TYPE_RUNTIMECLASS:
+    case TYPE_DELEGATE:
         return FALSE;
     case TYPE_APICONTRACT:
     case TYPE_PARAMETERIZED_TYPE:
@@ -3299,6 +3315,14 @@
     return stmt;
 }
 
+static statement_t *make_statement_delegate(type_t *ret, var_list_t *args)
+{
+    declarator_t *decl = make_declarator(make_var(xstrdup("Invoke")));
+    decl_spec_t *spec = make_decl_spec(ret, NULL, NULL, STG_NONE, 0, 0);
+    append_chain_type(decl, type_new_function(args), 0);
+    return make_statement_declaration(declare_var(NULL, spec, decl, FALSE));
+}
+
 static statement_list_t *append_statements(statement_list_t *l1, statement_list_t *l2)
 {
     if (!l2) return l1;
diff --git a/mingw-w64-tools/widl/src/parser.yy.c b/mingw-w64-tools/widl/src/parser.yy.c
index ee9a0eb..f2dd061 100644
--- a/mingw-w64-tools/widl/src/parser.yy.c
+++ b/mingw-w64-tools/widl/src/parser.yy.c
@@ -2670,6 +2670,7 @@
 	{"cpp_quote",       tCPPQUOTE,       0},
 	{"declare",         tDECLARE,        1},
 	{"default",         tDEFAULT,        0},
+	{"delegate",        tDELEGATE,       1},
 	{"dispinterface",   tDISPINTERFACE,  0},
 	{"double",          tDOUBLE,         0},
 	{"enum",            tENUM,           0},
diff --git a/mingw-w64-tools/widl/src/typegen.c b/mingw-w64-tools/widl/src/typegen.c
index 6ae55ac..2c1017b 100644
--- a/mingw-w64-tools/widl/src/typegen.c
+++ b/mingw-w64-tools/widl/src/typegen.c
@@ -354,6 +354,7 @@
     case TYPE_POINTER:
         if (type_get_type(type_pointer_get_ref_type(type)) == TYPE_INTERFACE ||
             type_get_type(type_pointer_get_ref_type(type)) == TYPE_RUNTIMECLASS ||
+            type_get_type(type_pointer_get_ref_type(type)) == TYPE_DELEGATE ||
             (type_get_type(type_pointer_get_ref_type(type)) == TYPE_VOID && is_attr(attrs, ATTR_IIDIS)))
             return TGT_IFACE_POINTER;
         else if (is_aliaschain_attr(type_pointer_get_ref_type(type), ATTR_CONTEXTHANDLE))
@@ -375,6 +376,7 @@
     case TYPE_ALIAS:
     case TYPE_BITFIELD:
     case TYPE_RUNTIMECLASS:
+    case TYPE_DELEGATE:
         break;
     case TYPE_APICONTRACT:
     case TYPE_PARAMETERIZED_TYPE:
@@ -1978,6 +1980,7 @@
     case TYPE_RUNTIMECLASS:
     case TYPE_PARAMETERIZED_TYPE:
     case TYPE_PARAMETER:
+    case TYPE_DELEGATE:
         /* these types should not be encountered here due to language
          * restrictions (interface, void, coclass, module), logical
          * restrictions (alias - due to type_get_type call above) or
@@ -2083,6 +2086,7 @@
     case TYPE_RUNTIMECLASS:
     case TYPE_PARAMETERIZED_TYPE:
     case TYPE_PARAMETER:
+    case TYPE_DELEGATE:
         /* these types should not be encountered here due to language
          * restrictions (interface, void, coclass, module), logical
          * restrictions (alias - due to type_get_type call above) or
diff --git a/mingw-w64-tools/widl/src/typelib.c b/mingw-w64-tools/widl/src/typelib.c
index 6f6c5f3..8b2a240 100644
--- a/mingw-w64-tools/widl/src/typelib.c
+++ b/mingw-w64-tools/widl/src/typelib.c
@@ -219,6 +219,7 @@
   case TYPE_UNION:
   case TYPE_ENCAPSULATED_UNION:
   case TYPE_RUNTIMECLASS:
+  case TYPE_DELEGATE:
     return VT_USERDEFINED;
 
   case TYPE_VOID:
diff --git a/mingw-w64-tools/widl/src/typetree.c b/mingw-w64-tools/widl/src/typetree.c
index 3f90fcb..9d0b557 100644
--- a/mingw-w64-tools/widl/src/typetree.c
+++ b/mingw-w64-tools/widl/src/typetree.c
@@ -29,6 +29,7 @@
 #include "parser.h"
 #include "typetree.h"
 #include "header.h"
+#include "hash.h"
 
 type_t *duptype(type_t *t, int dupname)
 {
@@ -49,6 +50,7 @@
     t->type_type = type;
     t->attrs = NULL;
     t->c_name = NULL;
+    t->signature = NULL;
     memset(&t->details, 0, sizeof(t->details));
     t->typestring_offset = 0;
     t->ptrdesc = 0;
@@ -110,6 +112,128 @@
     return n;
 }
 
+static size_t append_type_signature(char **buf, size_t *len, size_t pos, type_t *type);
+
+static size_t append_var_list_signature(char **buf, size_t *len, size_t pos, var_list_t *var_list)
+{
+    var_t *var;
+    size_t n = 0;
+
+    if (!var_list) n += strappend(buf, len, pos + n, ";");
+    else LIST_FOR_EACH_ENTRY(var, var_list, var_t, entry)
+    {
+        n += strappend(buf, len, pos + n, ";");
+        n += append_type_signature(buf, len, pos + n, var->declspec.type);
+    }
+
+    return n;
+}
+
+static size_t append_type_signature(char **buf, size_t *len, size_t pos, type_t *type)
+{
+    const GUID *uuid;
+    size_t n = 0;
+
+    if (!type) return 0;
+    switch (type->type_type)
+    {
+    case TYPE_INTERFACE:
+        if (type->signature) n += strappend(buf, len, pos + n, "%s", type->signature);
+        else
+        {
+            if (!(uuid = get_attrp(type->attrs, ATTR_UUID)))
+                error_loc_info(&type->loc_info, "cannot compute type signature, no uuid found for type %s.\n", type->name);
+
+            n += strappend(buf, len, pos + n, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
+                           uuid->Data1, uuid->Data2, uuid->Data3,
+                           uuid->Data4[0], uuid->Data4[1], uuid->Data4[2], uuid->Data4[3],
+                           uuid->Data4[4], uuid->Data4[5], uuid->Data4[6], uuid->Data4[7]);
+        }
+        return n;
+    case TYPE_DELEGATE:
+        n += strappend(buf, len, pos + n, "delegate(");
+        n += append_type_signature(buf, len, pos + n, type_delegate_get_iface(type));
+        n += strappend(buf, len, pos + n, ")");
+        return n;
+    case TYPE_RUNTIMECLASS:
+        n += strappend(buf, len, pos + n, "rc(");
+        n += append_namespaces(buf, len, pos + n, type->namespace, "", ".", type->name, NULL);
+        n += strappend(buf, len, pos + n, ";");
+        n += append_type_signature(buf, len, pos + n, type_runtimeclass_get_default_iface(type));
+        n += strappend(buf, len, pos + n, ")");
+        return n;
+    case TYPE_POINTER:
+        n += append_type_signature(buf, len, pos + n, type->details.pointer.ref.type);
+        return n;
+    case TYPE_ALIAS:
+        if (!strcmp(type->name, "boolean")) n += strappend(buf, len, pos + n, "b1");
+        else n += append_type_signature(buf, len, pos + n, type->details.alias.aliasee.type);
+        return n;
+    case TYPE_STRUCT:
+        n += strappend(buf, len, pos + n, "struct(");
+        n += append_namespaces(buf, len, pos + n, type->namespace, "", ".", type->name, NULL);
+        n += append_var_list_signature(buf, len, pos + n, type->details.structure->fields);
+        n += strappend(buf, len, pos + n, ")");
+        return n;
+    case TYPE_BASIC:
+        switch (type_basic_get_type(type))
+        {
+        case TYPE_BASIC_INT:
+        case TYPE_BASIC_INT32:
+            n += strappend(buf, len, pos + n, type_basic_get_sign(type) < 0 ? "i4" : "u4");
+            return n;
+        case TYPE_BASIC_INT64:
+            n += strappend(buf, len, pos + n, type_basic_get_sign(type) < 0 ? "i8" : "u8");
+            return n;
+        case TYPE_BASIC_INT8:
+            assert(type_basic_get_sign(type) >= 0); /* signature string for signed char isn't specified */
+            n += strappend(buf, len, pos + n, "u1");
+            return n;
+        case TYPE_BASIC_FLOAT:
+            n += strappend(buf, len, pos + n, "f4");
+            return n;
+        case TYPE_BASIC_DOUBLE:
+            n += strappend(buf, len, pos + n, "f8");
+            return n;
+        case TYPE_BASIC_INT16:
+        case TYPE_BASIC_INT3264:
+        case TYPE_BASIC_LONG:
+        case TYPE_BASIC_CHAR:
+        case TYPE_BASIC_HYPER:
+        case TYPE_BASIC_BYTE:
+        case TYPE_BASIC_WCHAR:
+        case TYPE_BASIC_ERROR_STATUS_T:
+        case TYPE_BASIC_HANDLE:
+            error_loc_info(&type->loc_info, "unimplemented type signature for basic type %d.\n", type_basic_get_type(type));
+            break;
+        }
+    case TYPE_ENUM:
+        n += strappend(buf, len, pos + n, "enum(");
+        n += append_namespaces(buf, len, pos + n, type->namespace, "", ".", type->name, NULL);
+        if (is_attr(type->attrs, ATTR_FLAGS)) n += strappend(buf, len, pos + n, ";u4");
+        else n += strappend(buf, len, pos + n, ";i4");
+        n += strappend(buf, len, pos + n, ")");
+        return n;
+    case TYPE_ARRAY:
+    case TYPE_ENCAPSULATED_UNION:
+    case TYPE_UNION:
+    case TYPE_COCLASS:
+    case TYPE_VOID:
+    case TYPE_FUNCTION:
+    case TYPE_BITFIELD:
+    case TYPE_MODULE:
+    case TYPE_APICONTRACT:
+        error_loc_info(&type->loc_info, "unimplemented type signature for type %s of type %d.\n", type->name, type->type_type);
+        break;
+    case TYPE_PARAMETERIZED_TYPE:
+    case TYPE_PARAMETER:
+        assert(0); /* should not be there */
+        break;
+    }
+
+    return n;
+}
+
 char *format_namespace(struct namespace *namespace, const char *prefix, const char *separator, const char *suffix, const char *abi_prefix)
 {
     size_t len = 0;
@@ -142,15 +266,15 @@
     {"Windows_CFoundation_C", "__F"},
 };
 
-static char *format_parameterized_type_c_name(type_t *type, typeref_list_t *params)
+static char *format_parameterized_type_c_name(type_t *type, typeref_list_t *params, const char *prefix)
 {
     size_t len = 0, pos = 0;
     char *buf = NULL, *tmp;
     int i, count = params ? list_count(params) : 0;
     typeref_t *ref;
 
-    pos += append_namespaces(&buf, &len, pos, type->namespace, "__x_", "_C", type->name, use_abi_namespace ? "ABI" : NULL);
-    pos += strappend(&buf, &len, pos, "_%d", count);
+    pos += append_namespaces(&buf, &len, pos, type->namespace, "__x_", "_C", "", use_abi_namespace ? "ABI" : NULL);
+    pos += strappend(&buf, &len, pos, "%s%s_%d", prefix, type->name, count);
     if (params) LIST_FOR_EACH_ENTRY(ref, params, typeref_t, entry)
     {
         for (type = ref->type; type->type_type == TYPE_POINTER; type = type_pointer_get_ref_type(type)) {}
@@ -171,6 +295,30 @@
     return buf;
 }
 
+static char *format_parameterized_type_signature(type_t *type, typeref_list_t *params)
+{
+    size_t len = 0, pos = 0;
+    char *buf = NULL;
+    typeref_t *ref;
+    const GUID *uuid;
+
+     if (!(uuid = get_attrp(type->attrs, ATTR_UUID)))
+        error_loc_info(&type->loc_info, "cannot compute type signature, no uuid found for type %s.\n", type->name);
+
+    pos += strappend(&buf, &len, pos, "pinterface({%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
+                     uuid->Data1, uuid->Data2, uuid->Data3,
+                     uuid->Data4[0], uuid->Data4[1], uuid->Data4[2], uuid->Data4[3],
+                     uuid->Data4[4], uuid->Data4[5], uuid->Data4[6], uuid->Data4[7]);
+    if (params) LIST_FOR_EACH_ENTRY(ref, params, typeref_t, entry)
+    {
+        pos += strappend(&buf, &len, pos, ";");
+        pos += append_type_signature(&buf, &len, pos, ref->type);
+    }
+    pos += strappend(&buf, &len, pos, ")");
+
+    return buf;
+}
+
 type_t *type_new_function(var_list_t *args)
 {
     var_t *arg;
@@ -664,6 +812,55 @@
     return apicontract;
 }
 
+static void compute_delegate_iface_names(type_t *delegate, type_t *type, typeref_list_t *params)
+{
+    type_t *iface = delegate->details.delegate.iface;
+    iface->namespace = delegate->namespace;
+    iface->name = strmake("I%s", delegate->name);
+    if (type) iface->c_name = format_parameterized_type_c_name(type, params, "I");
+    else iface->c_name = format_namespace(delegate->namespace, "__x_", "_C", iface->name, use_abi_namespace ? "ABI" : NULL);
+}
+
+type_t *type_delegate_declare(char *name, struct namespace *namespace)
+{
+    type_t *type = get_type(TYPE_DELEGATE, name, NULL, 0);
+    if (type_get_type_detect_alias(type) != TYPE_DELEGATE)
+        error_loc("delegate %s previously not declared a delegate at %s:%d\n",
+                  type->name, type->loc_info.input_name, type->loc_info.line_number);
+    return type;
+}
+
+type_t *type_delegate_define(type_t *delegate, attr_list_t *attrs, statement_list_t *stmts)
+{
+    type_t *iface;
+
+    if (delegate->defined)
+        error_loc("delegate %s already defined at %s:%d\n",
+                  delegate->name, delegate->loc_info.input_name, delegate->loc_info.line_number);
+
+    delegate->attrs = check_interface_attrs(delegate->name, attrs);
+
+    iface = make_type(TYPE_INTERFACE);
+    iface->attrs = delegate->attrs;
+    iface->details.iface = xmalloc(sizeof(*iface->details.iface));
+    iface->details.iface->disp_props = NULL;
+    iface->details.iface->disp_methods = NULL;
+    iface->details.iface->stmts = stmts;
+    iface->details.iface->inherit = find_type("IUnknown", NULL, 0);
+    if (!iface->details.iface->inherit) error_loc("IUnknown is undefined\n");
+    iface->details.iface->disp_inherit = NULL;
+    iface->details.iface->async_iface = NULL;
+    iface->details.iface->requires = NULL;
+    iface->defined = TRUE;
+    compute_method_indexes(iface);
+
+    delegate->details.delegate.iface = iface;
+    delegate->defined = TRUE;
+    compute_delegate_iface_names(delegate, NULL, NULL);
+
+    return delegate;
+}
+
 type_t *type_parameterized_interface_declare(char *name, struct namespace *namespace, typeref_list_t *params)
 {
     type_t *type = get_type(TYPE_PARAMETERIZED_TYPE, name, namespace, 0);
@@ -703,6 +900,46 @@
     return type;
 }
 
+type_t *type_parameterized_delegate_declare(char *name, struct namespace *namespace, typeref_list_t *params)
+{
+    type_t *type = get_type(TYPE_PARAMETERIZED_TYPE, name, namespace, 0);
+    if (type_get_type_detect_alias(type) != TYPE_PARAMETERIZED_TYPE)
+        error_loc("pdelegate %s previously not declared a pdelegate at %s:%d\n",
+                  type->name, type->loc_info.input_name, type->loc_info.line_number);
+    type->details.parameterized.type = make_type(TYPE_DELEGATE);
+    type->details.parameterized.params = params;
+    return type;
+}
+
+type_t *type_parameterized_delegate_define(type_t *type, attr_list_t *attrs, statement_list_t *stmts)
+{
+    type_t *iface, *delegate;
+
+    if (type->defined)
+        error_loc("pdelegate %s already defined at %s:%d\n",
+                  type->name, type->loc_info.input_name, type->loc_info.line_number);
+
+    type->attrs = check_interface_attrs(type->name, attrs);
+
+    delegate = type->details.parameterized.type;
+    delegate->attrs = type->attrs;
+    delegate->details.delegate.iface = make_type(TYPE_INTERFACE);
+
+    iface = delegate->details.delegate.iface;
+    iface->details.iface = xmalloc(sizeof(*iface->details.iface));
+    iface->details.iface->disp_props = NULL;
+    iface->details.iface->disp_methods = NULL;
+    iface->details.iface->stmts = stmts;
+    iface->details.iface->inherit = find_type("IUnknown", NULL, 0);
+    if (!iface->details.iface->inherit) error_loc("IUnknown is undefined\n");
+    iface->details.iface->disp_inherit = NULL;
+    iface->details.iface->async_iface = NULL;
+    iface->details.iface->requires = NULL;
+
+    type->defined = TRUE;
+    return type;
+}
+
 type_t *type_parameterized_type_specialize_partial(type_t *type, typeref_list_t *params)
 {
     type_t *new_type = duptype(type, 0);
@@ -821,6 +1058,7 @@
     case TYPE_BITFIELD:
     case TYPE_INTERFACE:
     case TYPE_RUNTIMECLASS:
+    case TYPE_DELEGATE:
         return type;
     case TYPE_PARAMETER:
         if (!orig || !repl) return NULL;
@@ -883,6 +1121,11 @@
     iface->details.iface->requires = NULL;
 }
 
+static void type_parameterized_delegate_specialize(type_t *tmpl, type_t *delegate, typeref_list_t *orig, typeref_list_t *repl)
+{
+    type_parameterized_interface_specialize(tmpl->details.delegate.iface, delegate->details.delegate.iface, orig, repl);
+}
+
 type_t *type_parameterized_type_specialize_declare(type_t *type, typeref_list_t *params)
 {
     type_t *tmpl = type->details.parameterized.type;
@@ -891,11 +1134,55 @@
     new_type->namespace = type->namespace;
     new_type->name = format_parameterized_type_name(type, params);
     reg_type(new_type, new_type->name, new_type->namespace, 0);
-    new_type->c_name = format_parameterized_type_c_name(type, params);
+    new_type->c_name = format_parameterized_type_c_name(type, params, "");
+
+    if (new_type->type_type == TYPE_DELEGATE)
+    {
+        new_type->details.delegate.iface = duptype(tmpl->details.delegate.iface, 0);
+        compute_delegate_iface_names(new_type, type, params);
+    }
 
     return new_type;
 }
 
+static void compute_interface_signature_uuid(type_t *iface)
+{
+    static const char winrt_pinterface_namespace[] = {0x11,0xf4,0x7a,0xd5,0x7b,0x73,0x42,0xc0,0xab,0xae,0x87,0x8b,0x1e,0x16,0xad,0xee};
+    static const int version = 5;
+    struct sha1_context ctx;
+    unsigned char hash[20];
+    GUID *uuid;
+
+    if (!(uuid = get_attrp(iface->attrs, ATTR_UUID)))
+    {
+        uuid = xmalloc(sizeof(GUID));
+        iface->attrs = append_attr(iface->attrs, make_attrp(ATTR_UUID, uuid));
+    }
+
+    sha1_init(&ctx);
+    sha1_update(&ctx, winrt_pinterface_namespace, sizeof(winrt_pinterface_namespace));
+    sha1_update(&ctx, iface->signature, strlen(iface->signature));
+    sha1_finalize(&ctx, (ULONG *)hash);
+
+    /* https://tools.ietf.org/html/rfc4122:
+
+       * Set the four most significant bits (bits 12 through 15) of the
+         time_hi_and_version field to the appropriate 4-bit version number
+         from Section 4.1.3.
+
+       * Set the two most significant bits (bits 6 and 7) of the
+         clock_seq_hi_and_reserved to zero and one, respectively.
+    */
+
+    hash[6] = ((hash[6] & 0x0f) | (version << 4));
+    hash[8] = ((hash[8] & 0x3f) | 0x80);
+
+    uuid->Data1 = ((DWORD)hash[0] << 24)|((DWORD)hash[1] << 16)|((DWORD)hash[2] << 8)|(DWORD)hash[3];
+    uuid->Data2 = ((WORD)hash[4] << 8)|(WORD)hash[5];
+    uuid->Data3 = ((WORD)hash[6] << 8)|(WORD)hash[7];
+    memcpy(&uuid->Data4, hash + 8, sizeof(*uuid) - offsetof(GUID, Data4));
+}
+
 type_t *type_parameterized_type_specialize_define(type_t *type)
 {
     type_t *tmpl = type->details.parameterized.type;
@@ -911,11 +1198,22 @@
     if (type_get_type_detect_alias(tmpl->details.parameterized.type) == TYPE_INTERFACE &&
         type_get_type_detect_alias(iface) == TYPE_INTERFACE)
         type_parameterized_interface_specialize(tmpl->details.parameterized.type, iface, orig, repl);
+    else if (type_get_type_detect_alias(tmpl->details.parameterized.type) == TYPE_DELEGATE &&
+             type_get_type_detect_alias(iface) == TYPE_DELEGATE)
+        type_parameterized_delegate_specialize(tmpl->details.parameterized.type, iface, orig, repl);
     else
-        error_loc("pinterface %s previously not declared a pinterface at %s:%d\n",
+        error_loc("pinterface/pdelegate %s previously not declared a pinterface/pdelegate at %s:%d\n",
                   iface->name, iface->loc_info.input_name, iface->loc_info.line_number);
 
+    iface->signature = format_parameterized_type_signature(type, repl);
     iface->defined = TRUE;
+    if (iface->type_type == TYPE_DELEGATE)
+    {
+        iface = iface->details.delegate.iface;
+        iface->signature = format_parameterized_type_signature(type, repl);
+        iface->defined = TRUE;
+    }
+    compute_interface_signature_uuid(iface);
     compute_method_indexes(iface);
     return iface;
 }
diff --git a/mingw-w64-tools/widl/src/typetree.h b/mingw-w64-tools/widl/src/typetree.h
index 4f2d39a..c8bccc2 100644
--- a/mingw-w64-tools/widl/src/typetree.h
+++ b/mingw-w64-tools/widl/src/typetree.h
@@ -64,8 +64,12 @@
 type_t *type_runtimeclass_define(type_t *runtimeclass, attr_list_t *attrs, typeref_list_t *ifaces);
 type_t *type_apicontract_declare(char *name, struct namespace *namespace);
 type_t *type_apicontract_define(type_t *apicontract, attr_list_t *attrs);
+type_t *type_delegate_declare(char *name, struct namespace *namespace);
+type_t *type_delegate_define(type_t *delegate, attr_list_t *attrs, statement_list_t *stmts);
 type_t *type_parameterized_interface_declare(char *name, struct namespace *namespace, typeref_list_t *params);
 type_t *type_parameterized_interface_define(type_t *type, attr_list_t *attrs, type_t *inherit, statement_list_t *stmts, typeref_list_t *requires);
+type_t *type_parameterized_delegate_declare(char *name, struct namespace *namespace, typeref_list_t *params);
+type_t *type_parameterized_delegate_define(type_t *type, attr_list_t *attrs, statement_list_t *stmts);
 type_t *type_parameterized_type_specialize_partial(type_t *type, typeref_list_t *params);
 type_t *type_parameterized_type_specialize_declare(type_t *type, typeref_list_t *params);
 type_t *type_parameterized_type_specialize_define(type_t *type);
@@ -76,6 +80,8 @@
 
 typeref_t *make_typeref(type_t *type);
 typeref_list_t *append_typeref(typeref_list_t *list, typeref_t *ref);
+attr_t *make_attrp(enum attr_type type, void *val);
+attr_list_t *append_attr(attr_list_t *list, attr_t *attr);
 
 /* FIXME: shouldn't need to export this */
 type_t *duptype(type_t *t, int dupname);
@@ -254,6 +260,7 @@
     case TYPE_ARRAY:
     case TYPE_BITFIELD:
     case TYPE_RUNTIMECLASS:
+    case TYPE_DELEGATE:
         return TRUE;
     case TYPE_APICONTRACT:
     case TYPE_PARAMETERIZED_TYPE:
@@ -376,6 +383,13 @@
     return NULL;
 }
 
+static inline type_t *type_delegate_get_iface(const type_t *type)
+{
+    type = type_get_real_type(type);
+    assert(type_get_type(type) == TYPE_DELEGATE);
+    return type->details.delegate.iface;
+}
+
 static inline const decl_spec_t *type_pointer_get_ref(const type_t *type)
 {
     type = type_get_real_type(type);
diff --git a/mingw-w64-tools/widl/src/widltypes.h b/mingw-w64-tools/widl/src/widltypes.h
index 777aabc..e01bd12 100644
--- a/mingw-w64-tools/widl/src/widltypes.h
+++ b/mingw-w64-tools/widl/src/widltypes.h
@@ -441,6 +441,11 @@
     typeref_list_t *params;
 };
 
+struct delegate_details
+{
+    type_t *iface;
+};
+
 #define HASHMAX 64
 
 struct namespace {
@@ -471,6 +476,7 @@
     TYPE_RUNTIMECLASS,
     TYPE_PARAMETERIZED_TYPE,
     TYPE_PARAMETER,
+    TYPE_DELEGATE,
 };
 
 struct _type_t {
@@ -493,8 +499,10 @@
     struct alias_details alias;
     struct runtimeclass_details runtimeclass;
     struct parameterized_details parameterized;
+    struct delegate_details delegate;
   } details;
   const char *c_name;
+  const char *signature;
   unsigned int typestring_offset;
   unsigned int ptrdesc;           /* used for complex structs */
   int typelib_idx;