widl: Updated to current Wine version.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
diff --git a/mingw-w64-tools/widl/VERSION b/mingw-w64-tools/widl/VERSION
index 7fca9d0..fdcf37f 100644
--- a/mingw-w64-tools/widl/VERSION
+++ b/mingw-w64-tools/widl/VERSION
@@ -1 +1 @@
-WIDL version 5.13
+WIDL version 5.16
diff --git a/mingw-w64-tools/widl/configure b/mingw-w64-tools/widl/configure
index 84d880e..9d5a6ec 100755
--- a/mingw-w64-tools/widl/configure
+++ b/mingw-w64-tools/widl/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for widl 5.13.
+# Generated by GNU Autoconf 2.69 for widl 5.16.
 #
 # Report bugs to <mingw-w64-public@lists.sourceforge.net>.
 #
@@ -580,8 +580,8 @@
 # Identity of this package.
 PACKAGE_NAME='widl'
 PACKAGE_TARNAME='widl'
-PACKAGE_VERSION='5.13'
-PACKAGE_STRING='widl 5.13'
+PACKAGE_VERSION='5.16'
+PACKAGE_STRING='widl 5.16'
 PACKAGE_BUGREPORT='mingw-w64-public@lists.sourceforge.net'
 PACKAGE_URL=''
 
@@ -1296,7 +1296,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures widl 5.13 to adapt to many kinds of systems.
+\`configure' configures widl 5.16 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1368,7 +1368,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of widl 5.13:";;
+     short | recursive ) echo "Configuration of widl 5.16:";;
    esac
   cat <<\_ACEOF
 
@@ -1470,7 +1470,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-widl configure 5.13
+widl configure 5.16
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2023,7 +2023,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by widl $as_me 5.13, which was
+It was created by widl $as_me 5.16, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3002,7 +3002,7 @@
 
 # Define the identity of the package.
  PACKAGE='widl'
- VERSION='5.13'
+ VERSION='5.16'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -5466,7 +5466,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by widl $as_me 5.13, which was
+This file was extended by widl $as_me 5.16, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -5532,7 +5532,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-widl config.status 5.13
+widl config.status 5.16
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/mingw-w64-tools/widl/include/winbase.h b/mingw-w64-tools/widl/include/winbase.h
index 319423b..ab3155e 100644
--- a/mingw-w64-tools/widl/include/winbase.h
+++ b/mingw-w64-tools/widl/include/winbase.h
@@ -1827,6 +1827,7 @@
 WINBASEAPI BOOL        WINAPI ConnectNamedPipe(HANDLE,LPOVERLAPPED);
 WINBASEAPI BOOL        WINAPI ContinueDebugEvent(DWORD,DWORD,DWORD);
 WINBASEAPI HANDLE      WINAPI ConvertToGlobalHandle(HANDLE hSrc);
+WINBASEAPI BOOL        WINAPI CopyContext(CONTEXT*, DWORD, CONTEXT*);
 WINBASEAPI BOOL        WINAPI CopyFileA(LPCSTR,LPCSTR,BOOL);
 WINBASEAPI BOOL        WINAPI CopyFileW(LPCWSTR,LPCWSTR,BOOL);
 #define                       CopyFile WINELIB_NAME_AW(CopyFile)
@@ -2136,6 +2137,7 @@
 WINBASEAPI UINT        WINAPI GetDriveTypeA(LPCSTR);
 WINBASEAPI UINT        WINAPI GetDriveTypeW(LPCWSTR);
 #define                       GetDriveType WINELIB_NAME_AW(GetDriveType)
+WINBASEAPI DWORD64     WINAPI GetEnabledXStateFeatures(void);
 WINBASEAPI LPSTR       WINAPI GetEnvironmentStringsA(void);
 WINBASEAPI LPWSTR      WINAPI GetEnvironmentStringsW(void);
 #define                       GetEnvironmentStrings WINELIB_NAME_AW(GetEnvironmentStrings)
@@ -2336,6 +2338,7 @@
 WINBASEAPI UINT        WINAPI GetWindowsDirectoryW(LPWSTR,UINT);
 #define                       GetWindowsDirectory WINELIB_NAME_AW(GetWindowsDirectory)
 WINBASEAPI UINT        WINAPI GetWriteWatch(DWORD,LPVOID,SIZE_T,LPVOID*,ULONG_PTR*,ULONG*);
+WINBASEAPI BOOL        WINAPI GetXStateFeaturesMask(CONTEXT*,DWORD64*);
 WINBASEAPI ATOM        WINAPI GlobalAddAtomA(LPCSTR);
 WINBASEAPI ATOM        WINAPI GlobalAddAtomW(LPCWSTR);
 #define                       GlobalAddAtom WINELIB_NAME_AW(GlobalAddAtom)
@@ -2378,6 +2381,8 @@
 WINBASEAPI BOOL        WINAPI InitAtomTable(DWORD);
 WINADVAPI  BOOL        WINAPI InitializeAcl(PACL,DWORD,DWORD);
 WINBASEAPI VOID        WINAPI InitializeConditionVariable(PCONDITION_VARIABLE);
+WINBASEAPI BOOL        WINAPI InitializeContext(void *,DWORD,CONTEXT **,DWORD *);
+WINBASEAPI BOOL        WINAPI InitializeContext2(void *,DWORD,CONTEXT **,DWORD *,ULONG64);
 WINBASEAPI void        WINAPI InitializeCriticalSection(CRITICAL_SECTION *lpCrit);
 WINBASEAPI BOOL        WINAPI InitializeCriticalSectionAndSpinCount(CRITICAL_SECTION *,DWORD);
 WINBASEAPI BOOL        WINAPI InitializeCriticalSectionEx(CRITICAL_SECTION *,DWORD,DWORD);
@@ -2436,6 +2441,7 @@
 WINBASEAPI SIZE_T      WINAPI LocalShrink(HGLOBAL,UINT);
 WINBASEAPI SIZE_T      WINAPI LocalSize(HLOCAL);
 WINBASEAPI BOOL        WINAPI LocalUnlock(HLOCAL);
+WINBASEAPI void *      WINAPI LocateXStateFeature(CONTEXT *,DWORD,DWORD *);
 WINBASEAPI LPVOID      WINAPI LockResource(HGLOBAL);
 #define                       LockSegment(handle) GlobalFix((HANDLE)(handle))
 WINADVAPI  BOOL        WINAPI LookupAccountNameA(LPCSTR,LPCSTR,PSID,LPDWORD,LPSTR,LPDWORD,PSID_NAME_USE);
@@ -2696,6 +2702,7 @@
 WINBASEAPI BOOL        WINAPI SetWaitableTimer(HANDLE,const LARGE_INTEGER*,LONG,PTIMERAPCROUTINE,LPVOID,BOOL);
 WINBASEAPI BOOL        WINAPI SetWaitableTimerEx(HANDLE,const LARGE_INTEGER*,LONG,PTIMERAPCROUTINE,LPVOID,REASON_CONTEXT*,ULONG);
 WINBASEAPI BOOL        WINAPI SetUmsThreadInformation(PUMS_CONTEXT,UMS_THREAD_INFO_CLASS,void *,ULONG);
+WINBASEAPI BOOL        WINAPI SetXStateFeaturesMask(CONTEXT*, DWORD64);
 WINBASEAPI BOOL        WINAPI SetupComm(HANDLE,DWORD,DWORD);
 WINBASEAPI DWORD       WINAPI SignalObjectAndWait(HANDLE,HANDLE,DWORD,BOOL);
 WINBASEAPI DWORD       WINAPI SizeofResource(HMODULE,HRSRC);
diff --git a/mingw-w64-tools/widl/include/winnt.h b/mingw-w64-tools/widl/include/winnt.h
index e1cf784..63567ba 100644
--- a/mingw-w64-tools/widl/include/winnt.h
+++ b/mingw-w64-tools/widl/include/winnt.h
@@ -928,6 +928,12 @@
 #define PF_RDPID_INSTRUCTION_AVAILABLE          33
 #define PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE 34
 #define PF_MONITORX_INSTRUCTION_AVAILABLE       35
+#define PF_SSSE3_INSTRUCTIONS_AVAILABLE         36
+#define PF_SSE4_1_INSTRUCTIONS_AVAILABLE        37
+#define PF_SSE4_2_INSTRUCTIONS_AVAILABLE        38
+#define PF_AVX_INSTRUCTIONS_AVAILABLE           39
+#define PF_AVX2_INSTRUCTIONS_AVAILABLE          40
+#define PF_AVX512F_INSTRUCTIONS_AVAILABLE       41
 
 
 /* Execution state flags */
@@ -1054,6 +1060,30 @@
     } HighWord;
 } LDT_ENTRY, *PLDT_ENTRY, WOW64_LDT_ENTRY, *PWOW64_LDT_ENTRY;
 
+typedef struct DECLSPEC_ALIGN(16) _M128A {
+    ULONGLONG Low;
+    LONGLONG High;
+} M128A, *PM128A;
+
+typedef struct _XSAVE_FORMAT {
+    WORD ControlWord;        /* 000 */
+    WORD StatusWord;         /* 002 */
+    BYTE TagWord;            /* 004 */
+    BYTE Reserved1;          /* 005 */
+    WORD ErrorOpcode;        /* 006 */
+    DWORD ErrorOffset;       /* 008 */
+    WORD ErrorSelector;      /* 00c */
+    WORD Reserved2;          /* 00e */
+    DWORD DataOffset;        /* 010 */
+    WORD DataSelector;       /* 014 */
+    WORD Reserved3;          /* 016 */
+    DWORD MxCsr;             /* 018 */
+    DWORD MxCsr_Mask;        /* 01c */
+    M128A FloatRegisters[8]; /* 020 */
+    M128A XmmRegisters[16];  /* 0a0 */
+    BYTE Reserved4[96];      /* 1a0 */
+} XSAVE_FORMAT, *PXSAVE_FORMAT;
+
 /* x86-64 context definitions */
 #if defined(__x86_64__)
 
@@ -1072,29 +1102,7 @@
 #define EXCEPTION_WRITE_FAULT   1
 #define EXCEPTION_EXECUTE_FAULT 8
 
-typedef struct DECLSPEC_ALIGN(16) _M128A {
-    ULONGLONG Low;
-    LONGLONG High;
-} M128A, *PM128A;
-
-typedef struct _XMM_SAVE_AREA32 {
-    WORD ControlWord;        /* 000 */
-    WORD StatusWord;         /* 002 */
-    BYTE TagWord;            /* 004 */
-    BYTE Reserved1;          /* 005 */
-    WORD ErrorOpcode;        /* 006 */
-    DWORD ErrorOffset;       /* 008 */
-    WORD ErrorSelector;      /* 00c */
-    WORD Reserved2;          /* 00e */
-    DWORD DataOffset;        /* 010 */
-    WORD DataSelector;       /* 014 */
-    WORD Reserved3;          /* 016 */
-    DWORD MxCsr;             /* 018 */
-    DWORD MxCsr_Mask;        /* 01c */
-    M128A FloatRegisters[8]; /* 020 */
-    M128A XmmRegisters[16];  /* 0a0 */
-    BYTE Reserved4[96];      /* 1a0 */
-} XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;
+typedef XSAVE_FORMAT XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;
 
 typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
     DWORD64 P1Home;          /* 000 */
@@ -1289,6 +1297,64 @@
 
 #endif /* __x86_64__ */
 
+#define XSTATE_LEGACY_FLOATING_POINT 0
+#define XSTATE_LEGACY_SSE            1
+#define XSTATE_GSSE                  2
+#define XSTATE_AVX                   XSTATE_GSSE
+#define XSTATE_MPX_BNDREGS           3
+#define XSTATE_MPX_BNDCSR            4
+#define XSTATE_AVX512_KMASK          5
+#define XSTATE_AVX512_ZMM_H          6
+#define XSTATE_AVX512_ZMM            7
+#define XSTATE_IPT                   8
+#define XSTATE_CET_U                 11
+#define XSTATE_LWP                   62
+
+typedef struct _YMMCONTEXT
+{
+    M128A Ymm0;
+    M128A Ymm1;
+    M128A Ymm2;
+    M128A Ymm3;
+    M128A Ymm4;
+    M128A Ymm5;
+    M128A Ymm6;
+    M128A Ymm7;
+    M128A Ymm8;
+    M128A Ymm9;
+    M128A Ymm10;
+    M128A Ymm11;
+    M128A Ymm12;
+    M128A Ymm13;
+    M128A Ymm14;
+    M128A Ymm15;
+}
+YMMCONTEXT, *PYMMCONTEXT;
+
+typedef struct _XSTATE
+{
+    ULONG64 Mask;
+    ULONG64 CompactionMask;
+    ULONG64 Reserved[6];
+    YMMCONTEXT YmmContext;
+} XSTATE, *PXSTATE;
+
+typedef struct _CONTEXT_CHUNK
+{
+    LONG Offset;
+    ULONG Length;
+} CONTEXT_CHUNK, *PCONTEXT_CHUNK;
+
+typedef struct _CONTEXT_EX
+{
+    CONTEXT_CHUNK All;
+    CONTEXT_CHUNK Legacy;
+    CONTEXT_CHUNK XState;
+#ifdef _WIN64
+    ULONG64 align;
+#endif
+} CONTEXT_EX, *PCONTEXT_EX;
+
 /* IA64 context definitions */
 #ifdef __ia64__
 
@@ -1862,11 +1928,12 @@
 #define CONTEXT_INTEGER         (CONTEXT_ARM64 | 0x00000002)
 #define CONTEXT_FLOATING_POINT  (CONTEXT_ARM64 | 0x00000004)
 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM64 | 0x00000008)
+#define CONTEXT_ARM64_X18       (CONTEXT_ARM64 | 0x00000010)
 
 #define CONTEXT_UNWOUND_TO_CALL 0x20000000
 
-#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
-#define CONTEXT_ALL  (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
+#define CONTEXT_ALL  (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_ARM64_X18)
 
 #define EXCEPTION_READ_FAULT    0
 #define EXCEPTION_WRITE_FAULT   1
@@ -6769,6 +6836,38 @@
 
 #endif
 
+#ifdef _WIN64
+
+#if defined(_MSC_VER)
+
+#define InterlockedCompareExchange128 _InterlockedCompareExchange128
+static inline unsigned char _InterlockedCompareExchange128(__int64 *dest, __int64 xchg_high, __int64 xchg_low, __int64 *compare);
+#pragma intrinsic(_InterlockedCompareExchange128)
+
+#elif defined(__x86_64__)
+
+static inline unsigned char InterlockedCompareExchange128(__int64 *dest, __int64 xchg_high, __int64 xchg_low, __int64 *compare)
+{
+    unsigned char ret;
+    __asm__ __volatile__( "lock cmpxchg16b %0; setz %b2"
+                          : "=m" (dest[0]), "=m" (dest[1]), "=r" (ret),
+                            "=a" (compare[0]), "=d" (compare[1])
+                          : "m" (dest[0]), "m" (dest[1]), "3" (compare[0]), "4" (compare[1]),
+                            "c" (xchg_high), "b" (xchg_low) );
+    return ret;
+}
+
+#elif defined(__GNUC__)
+
+static inline unsigned char InterlockedCompareExchange128(__int64 *dest, __int64 xchg_high, __int64 xchg_low, __int64 *compare)
+{
+    return __sync_bool_compare_and_swap( (__int128 *)dest, *(__int128 *)compare, ((__int128)xchg_high << 64) | xchg_low );
+}
+
+#endif
+
+#endif /* _WIN64 */
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mingw-w64-tools/widl/src/client.c b/mingw-w64-tools/widl/src/client.c
index 6ef1cee..185ab8d 100644
--- a/mingw-w64-tools/widl/src/client.c
+++ b/mingw-w64-tools/widl/src/client.c
@@ -61,8 +61,7 @@
     fprintf(client, " %s ", callconv);
     fprintf(client, "%s%s(\n", prefix_client, get_name(func));
     indent++;
-    if (args)
-        write_args(client, args, iface->name, 0, TRUE);
+    if (args) write_args(client, args, iface->name, 0, TRUE, NAME_DEFAULT);
     else
         print_client("void");
     fprintf(client, ")\n");
diff --git a/mingw-w64-tools/widl/src/header.c b/mingw-w64-tools/widl/src/header.c
index a319f24..c8a1255 100644
--- a/mingw-w64-tools/widl/src/header.c
+++ b/mingw-w64-tools/widl/src/header.c
@@ -43,7 +43,7 @@
 context_handle_list_t context_handle_list = LIST_INIT(context_handle_list);
 generic_handle_list_t generic_handle_list = LIST_INIT(generic_handle_list);
 
-static void write_type_v(FILE *f, const decl_spec_t *t, int is_field, int declonly, const char *name);
+static void write_type_v(FILE *f, const decl_spec_t *t, int is_field, int declonly, const char *name, enum name_type name_type);
 
 static void indent(FILE *h, int delta)
 {
@@ -250,7 +250,7 @@
         default:
             ;
         }
-        write_type_v(h, &v->declspec, TRUE, v->declonly, name);
+        write_type_v(h, &v->declspec, TRUE, v->declonly, name, NAME_DEFAULT);
         fprintf(h, ";\n");
     }
 }
@@ -452,7 +452,7 @@
       case TYPE_INTERFACE:
       case TYPE_MODULE:
       case TYPE_COCLASS:
-        fprintf(h, "%s", t->name);
+        fprintf(h, "%s", name);
         break;
       case TYPE_VOID:
         fprintf(h, "void");
@@ -500,8 +500,7 @@
   {
     const var_list_t *args = type_function_get_args(t);
     fputc('(', h);
-    if (args)
-      write_args(h, args, NULL, 0, FALSE);
+    if (args) write_args(h, args, NULL, 0, FALSE, NAME_DEFAULT);
     else
       fprintf(h, "void");
     fputc(')', h);
@@ -533,14 +532,13 @@
   }
 }
 
-static void write_type_v(FILE *h, const decl_spec_t *ds, int is_field, int declonly, const char *name)
+static void write_type_v(FILE *h, const decl_spec_t *ds, int is_field, int declonly, const char *name, enum name_type name_type)
 {
     type_t *t = ds->type;
 
     if (!h) return;
 
-    if (t)
-        write_type_left(h, ds, NAME_DEFAULT, declonly, TRUE);
+    if (t) write_type_left(h, ds, name_type, declonly, TRUE);
 
     if (name) fprintf(h, "%s%s", !t || needs_space_after(t) ? " " : "", name );
 
@@ -575,7 +573,7 @@
 
 void write_type_decl(FILE *f, const decl_spec_t *t, const char *name)
 {
-  write_type_v(f, t, FALSE, TRUE, name);
+    write_type_v(f, t, FALSE, TRUE, name, NAME_DEFAULT);
 }
 
 void write_type_decl_left(FILE *f, const decl_spec_t *ds)
@@ -804,7 +802,7 @@
 static void write_typedef(FILE *header, type_t *type, int declonly)
 {
   fprintf(header, "typedef ");
-  write_type_v(header, type_alias_get_aliasee(type), FALSE, declonly, type->name);
+  write_type_v(header, type_alias_get_aliasee(type), FALSE, declonly, type->name, NAME_DEFAULT);
   fprintf(header, ";\n");
 }
 
@@ -848,7 +846,7 @@
         fprintf(header, "extern ");
         break;
     }
-    write_type_v(header, &v->declspec, FALSE, v->declonly, v->name);
+    write_type_v(header, &v->declspec, FALSE, v->declonly, v->name, NAME_DEFAULT);
     fprintf(header, ";\n\n");
   }
 }
@@ -1065,7 +1063,7 @@
   }
 }
 
-void write_args(FILE *h, const var_list_t *args, const char *name, int method, int do_indent)
+void write_args(FILE *h, const var_list_t *args, const char *name, int method, int do_indent, enum name_type name_type)
 {
   const var_t *arg;
   int count = 0;
@@ -1091,7 +1089,7 @@
     /* In theory we should be writing the definition using write_type_v(..., arg->declonly),
      * but that causes redefinition in e.g. proxy files. In fact MIDL disallows
      * defining UDTs inside of an argument list. */
-    write_type_decl(h, &arg->declspec, arg->name);
+    write_type_v(h, &arg->declspec, FALSE, TRUE, arg->name, name_type);
     if (method == 2) {
         const expr_t *expr = get_attrp(arg->attrs, ATTR_DEFAULTVALUE);
         if (expr) {
@@ -1153,14 +1151,14 @@
         --indentation;
         if (args) {
           fprintf(header, ",\n");
-          write_args(header, args, iface->name, 2, TRUE);
+          write_args(header, args, iface->name, 2, TRUE, NAME_DEFAULT);
         }
         fprintf(header, ") = 0;\n");
 
         indent(header, 0);
         write_type_decl_left(header, ret);
         fprintf(header, " %s %s(\n", callconv, get_name(func));
-        write_args(header, args, iface->name, 2, TRUE);
+        write_args(header, args, iface->name, 2, TRUE, NAME_DEFAULT);
         fprintf(header, ")\n");
         indent(header, 0);
         fprintf(header, "{\n");
@@ -1185,7 +1183,7 @@
       fprintf(header, "virtual ");
       write_type_decl_left(header, ret);
       fprintf(header, " %s %s(\n", callconv, get_name(func));
-      write_args(header, args, iface->name, 2, TRUE);
+      write_args(header, args, iface->name, 2, TRUE, NAME_DEFAULT);
       fprintf(header, ") = 0;\n");
 
       if (is_aggregate_return(func))
@@ -1222,7 +1220,7 @@
       fprintf(header, "static FORCEINLINE ");
       write_type_decl_left(header, type_function_get_ret(func->declspec.type));
       fprintf(header, " %s_%s(", name, get_name(func));
-      write_args(header, type_function_get_args(func->declspec.type), name, 1, FALSE);
+      write_args(header, type_function_get_args(func->declspec.type), name, 1, FALSE, NAME_C);
       fprintf(header, ") {\n");
       ++indentation;
       if (!is_aggregate_return(func)) {
@@ -1286,7 +1284,7 @@
       --indentation;
       if (type_function_get_args(func->declspec.type)) {
         fprintf(header, ",\n");
-        write_args(header, type_function_get_args(func->declspec.type), name, 0, TRUE);
+        write_args(header, type_function_get_args(func->declspec.type), name, 0, TRUE, NAME_C);
       }
       fprintf(header, ");\n");
       fprintf(header, "\n");
@@ -1318,7 +1316,7 @@
       /* proxy prototype */
       write_type_decl_left(header, type_function_get_ret(func->declspec.type));
       fprintf(header, " %s %s_%s_Proxy(\n", callconv, iface->name, get_name(func));
-      write_args(header, type_function_get_args(func->declspec.type), iface->name, 1, TRUE);
+      write_args(header, type_function_get_args(func->declspec.type), iface->name, 1, TRUE, NAME_DEFAULT);
       fprintf(header, ");\n");
       /* stub prototype */
       fprintf(header, "void __RPC_STUB %s_%s_Stub(\n", iface->name, get_name(func));
@@ -1353,7 +1351,7 @@
         /* proxy prototype - use local prototype */
         write_type_decl_left(fp, type_function_get_ret(m->declspec.type));
         fprintf(fp, " CALLBACK %s_%s_Proxy(\n", iface->name, get_name(m));
-        write_args(fp, type_function_get_args(m->declspec.type), iface->name, 1, TRUE);
+        write_args(fp, type_function_get_args(m->declspec.type), iface->name, 1, TRUE, NAME_DEFAULT);
         fprintf(fp, ")");
         if (body) {
           const decl_spec_t *rt = type_function_get_ret(m->declspec.type);
@@ -1375,7 +1373,7 @@
         /* stub prototype - use remotable prototype */
         write_type_decl_left(fp, type_function_get_ret(func->declspec.type));
         fprintf(fp, " __RPC_STUB %s_%s_Stub(\n", iface->name, get_name(m));
-        write_args(fp, type_function_get_args(func->declspec.type), iface->name, 1, TRUE);
+        write_args(fp, type_function_get_args(func->declspec.type), iface->name, 1, TRUE, NAME_DEFAULT);
         fprintf(fp, ")");
         if (body)
           /* Remotable methods must all return HRESULTs.  */
@@ -1429,7 +1427,7 @@
   fprintf(header, " %s ", callconv);
   fprintf(header, "%s%s(\n", prefix, get_name(fun));
   if (type_function_get_args(fun->declspec.type))
-    write_args(header, type_function_get_args(fun->declspec.type), iface->name, 0, TRUE);
+    write_args(header, type_function_get_args(fun->declspec.type), iface->name, 0, TRUE, NAME_DEFAULT);
   else
     fprintf(header, "    void");
   fprintf(header, ");\n\n");
diff --git a/mingw-w64-tools/widl/src/header.h b/mingw-w64-tools/widl/src/header.h
index cebfd83..d14e310 100644
--- a/mingw-w64-tools/widl/src/header.h
+++ b/mingw-w64-tools/widl/src/header.h
@@ -47,7 +47,7 @@
 extern int need_proxy_delegation(const statement_list_t *stmts);
 extern int need_inline_stubs_file(const statement_list_t *stmts);
 extern const var_t *is_callas(const attr_list_t *list);
-extern void write_args(FILE *h, const var_list_t *arg, const char *name, int obj, int do_indent);
+extern void write_args(FILE *h, const var_list_t *arg, const char *name, int obj, int do_indent, enum name_type name_type);
 extern const type_t* get_explicit_generic_handle_type(const var_t* var);
 extern const var_t *get_func_handle_var( const type_t *iface, const var_t *func,
                                          unsigned char *explicit_fc, unsigned char *implicit_fc );
diff --git a/mingw-w64-tools/widl/src/parser.h b/mingw-w64-tools/widl/src/parser.h
index a67b160..a6dc94a 100644
--- a/mingw-w64-tools/widl/src/parser.h
+++ b/mingw-w64-tools/widl/src/parser.h
@@ -38,6 +38,7 @@
 #define parse_only import_stack_ptr
 
 int is_type(const char *name);
+int is_namespace(const char *name);
 
 int do_warning(char *toggle, warning_list_t *wnum);
 int is_warning_enabled(int warning);
diff --git a/mingw-w64-tools/widl/src/parser.l b/mingw-w64-tools/widl/src/parser.l
index 3cbf4ff..925265d 100644
--- a/mingw-w64-tools/widl/src/parser.l
+++ b/mingw-w64-tools/widl/src/parser.l
@@ -451,7 +451,7 @@
 		return kwp->token;
 	}
 	parser_lval.str = xstrdup(kw);
-	return is_type(kw) ? aKNOWNTYPE : aIDENTIFIER;
+	return is_type(kw) ? aKNOWNTYPE : is_namespace(kw) ? aNAMESPACE : aIDENTIFIER;
 }
 
 static int attr_token(const char *kw)
diff --git a/mingw-w64-tools/widl/src/parser.tab.c b/mingw-w64-tools/widl/src/parser.tab.c
index ec6b2e3..4d2072f 100644
--- a/mingw-w64-tools/widl/src/parser.tab.c
+++ b/mingw-w64-tools/widl/src/parser.tab.c
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.6.2.  */
+/* A Bison parser, made by GNU Bison 3.7.2.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
@@ -49,7 +49,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.6.2"
+#define YYBISON_VERSION "3.7.2"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -158,6 +158,8 @@
 
 static void push_namespace(const char *name);
 static void pop_namespace(const char *name);
+static void init_lookup_namespace(const char *name);
+static void push_lookup_namespace(const char *name);
 
 static void check_arg_attrs(const var_t *arg);
 static void check_statements(const statement_list_t *stmts, int is_inside_library);
@@ -199,11 +201,12 @@
 };
 
 static struct namespace *current_namespace = &global_namespace;
+static struct namespace *lookup_namespace = &global_namespace;
 
 static typelib_t *current_typelib;
 
 
-#line 207 "parser.tab.c"
+#line 210 "parser.tab.c"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -247,189 +250,190 @@
     aIDENTIFIER = 258,             /* aIDENTIFIER  */
     aPRAGMA = 259,                 /* aPRAGMA  */
     aKNOWNTYPE = 260,              /* aKNOWNTYPE  */
-    aNUM = 261,                    /* aNUM  */
-    aHEXNUM = 262,                 /* aHEXNUM  */
-    aDOUBLE = 263,                 /* aDOUBLE  */
-    aSTRING = 264,                 /* aSTRING  */
-    aWSTRING = 265,                /* aWSTRING  */
-    aSQSTRING = 266,               /* aSQSTRING  */
-    aUUID = 267,                   /* aUUID  */
-    aEOF = 268,                    /* aEOF  */
-    aACF = 269,                    /* aACF  */
-    SHL = 270,                     /* SHL  */
-    SHR = 271,                     /* SHR  */
-    MEMBERPTR = 272,               /* MEMBERPTR  */
-    EQUALITY = 273,                /* EQUALITY  */
-    INEQUALITY = 274,              /* INEQUALITY  */
-    GREATEREQUAL = 275,            /* GREATEREQUAL  */
-    LESSEQUAL = 276,               /* LESSEQUAL  */
-    LOGICALOR = 277,               /* LOGICALOR  */
-    LOGICALAND = 278,              /* LOGICALAND  */
-    ELLIPSIS = 279,                /* ELLIPSIS  */
-    tAGGREGATABLE = 280,           /* tAGGREGATABLE  */
-    tALLOCATE = 281,               /* tALLOCATE  */
-    tANNOTATION = 282,             /* tANNOTATION  */
-    tAPPOBJECT = 283,              /* tAPPOBJECT  */
-    tASYNC = 284,                  /* tASYNC  */
-    tASYNCUUID = 285,              /* tASYNCUUID  */
-    tAUTOHANDLE = 286,             /* tAUTOHANDLE  */
-    tBINDABLE = 287,               /* tBINDABLE  */
-    tBOOLEAN = 288,                /* tBOOLEAN  */
-    tBROADCAST = 289,              /* tBROADCAST  */
-    tBYTE = 290,                   /* tBYTE  */
-    tBYTECOUNT = 291,              /* tBYTECOUNT  */
-    tCALLAS = 292,                 /* tCALLAS  */
-    tCALLBACK = 293,               /* tCALLBACK  */
-    tCASE = 294,                   /* tCASE  */
-    tCDECL = 295,                  /* tCDECL  */
-    tCHAR = 296,                   /* tCHAR  */
-    tCOCLASS = 297,                /* tCOCLASS  */
-    tCODE = 298,                   /* tCODE  */
-    tCOMMSTATUS = 299,             /* tCOMMSTATUS  */
-    tCONST = 300,                  /* tCONST  */
-    tCONTEXTHANDLE = 301,          /* tCONTEXTHANDLE  */
-    tCONTEXTHANDLENOSERIALIZE = 302, /* tCONTEXTHANDLENOSERIALIZE  */
-    tCONTEXTHANDLESERIALIZE = 303, /* tCONTEXTHANDLESERIALIZE  */
-    tCONTROL = 304,                /* tCONTROL  */
-    tCPPQUOTE = 305,               /* tCPPQUOTE  */
-    tDECODE = 306,                 /* tDECODE  */
-    tDEFAULT = 307,                /* tDEFAULT  */
-    tDEFAULTBIND = 308,            /* tDEFAULTBIND  */
-    tDEFAULTCOLLELEM = 309,        /* tDEFAULTCOLLELEM  */
-    tDEFAULTVALUE = 310,           /* tDEFAULTVALUE  */
-    tDEFAULTVTABLE = 311,          /* tDEFAULTVTABLE  */
-    tDISABLECONSISTENCYCHECK = 312, /* tDISABLECONSISTENCYCHECK  */
-    tDISPLAYBIND = 313,            /* tDISPLAYBIND  */
-    tDISPINTERFACE = 314,          /* tDISPINTERFACE  */
-    tDLLNAME = 315,                /* tDLLNAME  */
-    tDOUBLE = 316,                 /* tDOUBLE  */
-    tDUAL = 317,                   /* tDUAL  */
-    tENABLEALLOCATE = 318,         /* tENABLEALLOCATE  */
-    tENCODE = 319,                 /* tENCODE  */
-    tENDPOINT = 320,               /* tENDPOINT  */
-    tENTRY = 321,                  /* tENTRY  */
-    tENUM = 322,                   /* tENUM  */
-    tERRORSTATUST = 323,           /* tERRORSTATUST  */
-    tEXPLICITHANDLE = 324,         /* tEXPLICITHANDLE  */
-    tEXTERN = 325,                 /* tEXTERN  */
-    tFALSE = 326,                  /* tFALSE  */
-    tFASTCALL = 327,               /* tFASTCALL  */
-    tFAULTSTATUS = 328,            /* tFAULTSTATUS  */
-    tFLOAT = 329,                  /* tFLOAT  */
-    tFORCEALLOCATE = 330,          /* tFORCEALLOCATE  */
-    tHANDLE = 331,                 /* tHANDLE  */
-    tHANDLET = 332,                /* tHANDLET  */
-    tHELPCONTEXT = 333,            /* tHELPCONTEXT  */
-    tHELPFILE = 334,               /* tHELPFILE  */
-    tHELPSTRING = 335,             /* tHELPSTRING  */
-    tHELPSTRINGCONTEXT = 336,      /* tHELPSTRINGCONTEXT  */
-    tHELPSTRINGDLL = 337,          /* tHELPSTRINGDLL  */
-    tHIDDEN = 338,                 /* tHIDDEN  */
-    tHYPER = 339,                  /* tHYPER  */
-    tID = 340,                     /* tID  */
-    tIDEMPOTENT = 341,             /* tIDEMPOTENT  */
-    tIGNORE = 342,                 /* tIGNORE  */
-    tIIDIS = 343,                  /* tIIDIS  */
-    tIMMEDIATEBIND = 344,          /* tIMMEDIATEBIND  */
-    tIMPLICITHANDLE = 345,         /* tIMPLICITHANDLE  */
-    tIMPORT = 346,                 /* tIMPORT  */
-    tIMPORTLIB = 347,              /* tIMPORTLIB  */
-    tIN = 348,                     /* tIN  */
-    tIN_LINE = 349,                /* tIN_LINE  */
-    tINLINE = 350,                 /* tINLINE  */
-    tINPUTSYNC = 351,              /* tINPUTSYNC  */
-    tINT = 352,                    /* tINT  */
-    tINT32 = 353,                  /* tINT32  */
-    tINT3264 = 354,                /* tINT3264  */
-    tINT64 = 355,                  /* tINT64  */
-    tINTERFACE = 356,              /* tINTERFACE  */
-    tLCID = 357,                   /* tLCID  */
-    tLENGTHIS = 358,               /* tLENGTHIS  */
-    tLIBRARY = 359,                /* tLIBRARY  */
-    tLICENSED = 360,               /* tLICENSED  */
-    tLOCAL = 361,                  /* tLOCAL  */
-    tLONG = 362,                   /* tLONG  */
-    tMAYBE = 363,                  /* tMAYBE  */
-    tMESSAGE = 364,                /* tMESSAGE  */
-    tMETHODS = 365,                /* tMETHODS  */
-    tMODULE = 366,                 /* tMODULE  */
-    tNAMESPACE = 367,              /* tNAMESPACE  */
-    tNOCODE = 368,                 /* tNOCODE  */
-    tNONBROWSABLE = 369,           /* tNONBROWSABLE  */
-    tNONCREATABLE = 370,           /* tNONCREATABLE  */
-    tNONEXTENSIBLE = 371,          /* tNONEXTENSIBLE  */
-    tNOTIFY = 372,                 /* tNOTIFY  */
-    tNOTIFYFLAG = 373,             /* tNOTIFYFLAG  */
-    tNULL = 374,                   /* tNULL  */
-    tOBJECT = 375,                 /* tOBJECT  */
-    tODL = 376,                    /* tODL  */
-    tOLEAUTOMATION = 377,          /* tOLEAUTOMATION  */
-    tOPTIMIZE = 378,               /* tOPTIMIZE  */
-    tOPTIONAL = 379,               /* tOPTIONAL  */
-    tOUT = 380,                    /* tOUT  */
-    tPARTIALIGNORE = 381,          /* tPARTIALIGNORE  */
-    tPASCAL = 382,                 /* tPASCAL  */
-    tPOINTERDEFAULT = 383,         /* tPOINTERDEFAULT  */
-    tPRAGMA_WARNING = 384,         /* tPRAGMA_WARNING  */
-    tPROGID = 385,                 /* tPROGID  */
-    tPROPERTIES = 386,             /* tPROPERTIES  */
-    tPROPGET = 387,                /* tPROPGET  */
-    tPROPPUT = 388,                /* tPROPPUT  */
-    tPROPPUTREF = 389,             /* tPROPPUTREF  */
-    tPROXY = 390,                  /* tPROXY  */
-    tPTR = 391,                    /* tPTR  */
-    tPUBLIC = 392,                 /* tPUBLIC  */
-    tRANGE = 393,                  /* tRANGE  */
-    tREADONLY = 394,               /* tREADONLY  */
-    tREF = 395,                    /* tREF  */
-    tREGISTER = 396,               /* tREGISTER  */
-    tREPRESENTAS = 397,            /* tREPRESENTAS  */
-    tREQUESTEDIT = 398,            /* tREQUESTEDIT  */
-    tRESTRICTED = 399,             /* tRESTRICTED  */
-    tRETVAL = 400,                 /* tRETVAL  */
-    tSAFEARRAY = 401,              /* tSAFEARRAY  */
-    tSHORT = 402,                  /* tSHORT  */
-    tSIGNED = 403,                 /* tSIGNED  */
-    tSIZEIS = 404,                 /* tSIZEIS  */
-    tSIZEOF = 405,                 /* tSIZEOF  */
-    tSMALL = 406,                  /* tSMALL  */
-    tSOURCE = 407,                 /* tSOURCE  */
-    tSTATIC = 408,                 /* tSTATIC  */
-    tSTDCALL = 409,                /* tSTDCALL  */
-    tSTRICTCONTEXTHANDLE = 410,    /* tSTRICTCONTEXTHANDLE  */
-    tSTRING = 411,                 /* tSTRING  */
-    tSTRUCT = 412,                 /* tSTRUCT  */
-    tSWITCH = 413,                 /* tSWITCH  */
-    tSWITCHIS = 414,               /* tSWITCHIS  */
-    tSWITCHTYPE = 415,             /* tSWITCHTYPE  */
-    tTHREADING = 416,              /* tTHREADING  */
-    tTRANSMITAS = 417,             /* tTRANSMITAS  */
-    tTRUE = 418,                   /* tTRUE  */
-    tTYPEDEF = 419,                /* tTYPEDEF  */
-    tUIDEFAULT = 420,              /* tUIDEFAULT  */
-    tUNION = 421,                  /* tUNION  */
-    tUNIQUE = 422,                 /* tUNIQUE  */
-    tUNSIGNED = 423,               /* tUNSIGNED  */
-    tUSESGETLASTERROR = 424,       /* tUSESGETLASTERROR  */
-    tUSERMARSHAL = 425,            /* tUSERMARSHAL  */
-    tUUID = 426,                   /* tUUID  */
-    tV1ENUM = 427,                 /* tV1ENUM  */
-    tVARARG = 428,                 /* tVARARG  */
-    tVERSION = 429,                /* tVERSION  */
-    tVIPROGID = 430,               /* tVIPROGID  */
-    tVOID = 431,                   /* tVOID  */
-    tWCHAR = 432,                  /* tWCHAR  */
-    tWIREMARSHAL = 433,            /* tWIREMARSHAL  */
-    tAPARTMENT = 434,              /* tAPARTMENT  */
-    tNEUTRAL = 435,                /* tNEUTRAL  */
-    tSINGLE = 436,                 /* tSINGLE  */
-    tFREE = 437,                   /* tFREE  */
-    tBOTH = 438,                   /* tBOTH  */
-    CAST = 439,                    /* CAST  */
-    PPTR = 440,                    /* PPTR  */
-    POS = 441,                     /* POS  */
-    NEG = 442,                     /* NEG  */
-    ADDRESSOF = 443                /* ADDRESSOF  */
+    aNAMESPACE = 261,              /* aNAMESPACE  */
+    aNUM = 262,                    /* aNUM  */
+    aHEXNUM = 263,                 /* aHEXNUM  */
+    aDOUBLE = 264,                 /* aDOUBLE  */
+    aSTRING = 265,                 /* aSTRING  */
+    aWSTRING = 266,                /* aWSTRING  */
+    aSQSTRING = 267,               /* aSQSTRING  */
+    aUUID = 268,                   /* aUUID  */
+    aEOF = 269,                    /* aEOF  */
+    aACF = 270,                    /* aACF  */
+    SHL = 271,                     /* SHL  */
+    SHR = 272,                     /* SHR  */
+    MEMBERPTR = 273,               /* MEMBERPTR  */
+    EQUALITY = 274,                /* EQUALITY  */
+    INEQUALITY = 275,              /* INEQUALITY  */
+    GREATEREQUAL = 276,            /* GREATEREQUAL  */
+    LESSEQUAL = 277,               /* LESSEQUAL  */
+    LOGICALOR = 278,               /* LOGICALOR  */
+    LOGICALAND = 279,              /* LOGICALAND  */
+    ELLIPSIS = 280,                /* ELLIPSIS  */
+    tAGGREGATABLE = 281,           /* tAGGREGATABLE  */
+    tALLOCATE = 282,               /* tALLOCATE  */
+    tANNOTATION = 283,             /* tANNOTATION  */
+    tAPPOBJECT = 284,              /* tAPPOBJECT  */
+    tASYNC = 285,                  /* tASYNC  */
+    tASYNCUUID = 286,              /* tASYNCUUID  */
+    tAUTOHANDLE = 287,             /* tAUTOHANDLE  */
+    tBINDABLE = 288,               /* tBINDABLE  */
+    tBOOLEAN = 289,                /* tBOOLEAN  */
+    tBROADCAST = 290,              /* tBROADCAST  */
+    tBYTE = 291,                   /* tBYTE  */
+    tBYTECOUNT = 292,              /* tBYTECOUNT  */
+    tCALLAS = 293,                 /* tCALLAS  */
+    tCALLBACK = 294,               /* tCALLBACK  */
+    tCASE = 295,                   /* tCASE  */
+    tCDECL = 296,                  /* tCDECL  */
+    tCHAR = 297,                   /* tCHAR  */
+    tCOCLASS = 298,                /* tCOCLASS  */
+    tCODE = 299,                   /* tCODE  */
+    tCOMMSTATUS = 300,             /* tCOMMSTATUS  */
+    tCONST = 301,                  /* tCONST  */
+    tCONTEXTHANDLE = 302,          /* tCONTEXTHANDLE  */
+    tCONTEXTHANDLENOSERIALIZE = 303, /* tCONTEXTHANDLENOSERIALIZE  */
+    tCONTEXTHANDLESERIALIZE = 304, /* tCONTEXTHANDLESERIALIZE  */
+    tCONTROL = 305,                /* tCONTROL  */
+    tCPPQUOTE = 306,               /* tCPPQUOTE  */
+    tDECODE = 307,                 /* tDECODE  */
+    tDEFAULT = 308,                /* tDEFAULT  */
+    tDEFAULTBIND = 309,            /* tDEFAULTBIND  */
+    tDEFAULTCOLLELEM = 310,        /* tDEFAULTCOLLELEM  */
+    tDEFAULTVALUE = 311,           /* tDEFAULTVALUE  */
+    tDEFAULTVTABLE = 312,          /* tDEFAULTVTABLE  */
+    tDISABLECONSISTENCYCHECK = 313, /* tDISABLECONSISTENCYCHECK  */
+    tDISPLAYBIND = 314,            /* tDISPLAYBIND  */
+    tDISPINTERFACE = 315,          /* tDISPINTERFACE  */
+    tDLLNAME = 316,                /* tDLLNAME  */
+    tDOUBLE = 317,                 /* tDOUBLE  */
+    tDUAL = 318,                   /* tDUAL  */
+    tENABLEALLOCATE = 319,         /* tENABLEALLOCATE  */
+    tENCODE = 320,                 /* tENCODE  */
+    tENDPOINT = 321,               /* tENDPOINT  */
+    tENTRY = 322,                  /* tENTRY  */
+    tENUM = 323,                   /* tENUM  */
+    tERRORSTATUST = 324,           /* tERRORSTATUST  */
+    tEXPLICITHANDLE = 325,         /* tEXPLICITHANDLE  */
+    tEXTERN = 326,                 /* tEXTERN  */
+    tFALSE = 327,                  /* tFALSE  */
+    tFASTCALL = 328,               /* tFASTCALL  */
+    tFAULTSTATUS = 329,            /* tFAULTSTATUS  */
+    tFLOAT = 330,                  /* tFLOAT  */
+    tFORCEALLOCATE = 331,          /* tFORCEALLOCATE  */
+    tHANDLE = 332,                 /* tHANDLE  */
+    tHANDLET = 333,                /* tHANDLET  */
+    tHELPCONTEXT = 334,            /* tHELPCONTEXT  */
+    tHELPFILE = 335,               /* tHELPFILE  */
+    tHELPSTRING = 336,             /* tHELPSTRING  */
+    tHELPSTRINGCONTEXT = 337,      /* tHELPSTRINGCONTEXT  */
+    tHELPSTRINGDLL = 338,          /* tHELPSTRINGDLL  */
+    tHIDDEN = 339,                 /* tHIDDEN  */
+    tHYPER = 340,                  /* tHYPER  */
+    tID = 341,                     /* tID  */
+    tIDEMPOTENT = 342,             /* tIDEMPOTENT  */
+    tIGNORE = 343,                 /* tIGNORE  */
+    tIIDIS = 344,                  /* tIIDIS  */
+    tIMMEDIATEBIND = 345,          /* tIMMEDIATEBIND  */
+    tIMPLICITHANDLE = 346,         /* tIMPLICITHANDLE  */
+    tIMPORT = 347,                 /* tIMPORT  */
+    tIMPORTLIB = 348,              /* tIMPORTLIB  */
+    tIN = 349,                     /* tIN  */
+    tIN_LINE = 350,                /* tIN_LINE  */
+    tINLINE = 351,                 /* tINLINE  */
+    tINPUTSYNC = 352,              /* tINPUTSYNC  */
+    tINT = 353,                    /* tINT  */
+    tINT32 = 354,                  /* tINT32  */
+    tINT3264 = 355,                /* tINT3264  */
+    tINT64 = 356,                  /* tINT64  */
+    tINTERFACE = 357,              /* tINTERFACE  */
+    tLCID = 358,                   /* tLCID  */
+    tLENGTHIS = 359,               /* tLENGTHIS  */
+    tLIBRARY = 360,                /* tLIBRARY  */
+    tLICENSED = 361,               /* tLICENSED  */
+    tLOCAL = 362,                  /* tLOCAL  */
+    tLONG = 363,                   /* tLONG  */
+    tMAYBE = 364,                  /* tMAYBE  */
+    tMESSAGE = 365,                /* tMESSAGE  */
+    tMETHODS = 366,                /* tMETHODS  */
+    tMODULE = 367,                 /* tMODULE  */
+    tNAMESPACE = 368,              /* tNAMESPACE  */
+    tNOCODE = 369,                 /* tNOCODE  */
+    tNONBROWSABLE = 370,           /* tNONBROWSABLE  */
+    tNONCREATABLE = 371,           /* tNONCREATABLE  */
+    tNONEXTENSIBLE = 372,          /* tNONEXTENSIBLE  */
+    tNOTIFY = 373,                 /* tNOTIFY  */
+    tNOTIFYFLAG = 374,             /* tNOTIFYFLAG  */
+    tNULL = 375,                   /* tNULL  */
+    tOBJECT = 376,                 /* tOBJECT  */
+    tODL = 377,                    /* tODL  */
+    tOLEAUTOMATION = 378,          /* tOLEAUTOMATION  */
+    tOPTIMIZE = 379,               /* tOPTIMIZE  */
+    tOPTIONAL = 380,               /* tOPTIONAL  */
+    tOUT = 381,                    /* tOUT  */
+    tPARTIALIGNORE = 382,          /* tPARTIALIGNORE  */
+    tPASCAL = 383,                 /* tPASCAL  */
+    tPOINTERDEFAULT = 384,         /* tPOINTERDEFAULT  */
+    tPRAGMA_WARNING = 385,         /* tPRAGMA_WARNING  */
+    tPROGID = 386,                 /* tPROGID  */
+    tPROPERTIES = 387,             /* tPROPERTIES  */
+    tPROPGET = 388,                /* tPROPGET  */
+    tPROPPUT = 389,                /* tPROPPUT  */
+    tPROPPUTREF = 390,             /* tPROPPUTREF  */
+    tPROXY = 391,                  /* tPROXY  */
+    tPTR = 392,                    /* tPTR  */
+    tPUBLIC = 393,                 /* tPUBLIC  */
+    tRANGE = 394,                  /* tRANGE  */
+    tREADONLY = 395,               /* tREADONLY  */
+    tREF = 396,                    /* tREF  */
+    tREGISTER = 397,               /* tREGISTER  */
+    tREPRESENTAS = 398,            /* tREPRESENTAS  */
+    tREQUESTEDIT = 399,            /* tREQUESTEDIT  */
+    tRESTRICTED = 400,             /* tRESTRICTED  */
+    tRETVAL = 401,                 /* tRETVAL  */
+    tSAFEARRAY = 402,              /* tSAFEARRAY  */
+    tSHORT = 403,                  /* tSHORT  */
+    tSIGNED = 404,                 /* tSIGNED  */
+    tSIZEIS = 405,                 /* tSIZEIS  */
+    tSIZEOF = 406,                 /* tSIZEOF  */
+    tSMALL = 407,                  /* tSMALL  */
+    tSOURCE = 408,                 /* tSOURCE  */
+    tSTATIC = 409,                 /* tSTATIC  */
+    tSTDCALL = 410,                /* tSTDCALL  */
+    tSTRICTCONTEXTHANDLE = 411,    /* tSTRICTCONTEXTHANDLE  */
+    tSTRING = 412,                 /* tSTRING  */
+    tSTRUCT = 413,                 /* tSTRUCT  */
+    tSWITCH = 414,                 /* tSWITCH  */
+    tSWITCHIS = 415,               /* tSWITCHIS  */
+    tSWITCHTYPE = 416,             /* tSWITCHTYPE  */
+    tTHREADING = 417,              /* tTHREADING  */
+    tTRANSMITAS = 418,             /* tTRANSMITAS  */
+    tTRUE = 419,                   /* tTRUE  */
+    tTYPEDEF = 420,                /* tTYPEDEF  */
+    tUIDEFAULT = 421,              /* tUIDEFAULT  */
+    tUNION = 422,                  /* tUNION  */
+    tUNIQUE = 423,                 /* tUNIQUE  */
+    tUNSIGNED = 424,               /* tUNSIGNED  */
+    tUSESGETLASTERROR = 425,       /* tUSESGETLASTERROR  */
+    tUSERMARSHAL = 426,            /* tUSERMARSHAL  */
+    tUUID = 427,                   /* tUUID  */
+    tV1ENUM = 428,                 /* tV1ENUM  */
+    tVARARG = 429,                 /* tVARARG  */
+    tVERSION = 430,                /* tVERSION  */
+    tVIPROGID = 431,               /* tVIPROGID  */
+    tVOID = 432,                   /* tVOID  */
+    tWCHAR = 433,                  /* tWCHAR  */
+    tWIREMARSHAL = 434,            /* tWIREMARSHAL  */
+    tAPARTMENT = 435,              /* tAPARTMENT  */
+    tNEUTRAL = 436,                /* tNEUTRAL  */
+    tSINGLE = 437,                 /* tSINGLE  */
+    tFREE = 438,                   /* tFREE  */
+    tBOTH = 439,                   /* tBOTH  */
+    CAST = 440,                    /* CAST  */
+    PPTR = 441,                    /* PPTR  */
+    POS = 442,                     /* POS  */
+    NEG = 443,                     /* NEG  */
+    ADDRESSOF = 444                /* ADDRESSOF  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
@@ -438,7 +442,7 @@
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 129 "parser.y"
+#line 132 "parser.y"
 
 	attr_t *attr;
 	attr_list_t *attr_list;
@@ -467,7 +471,7 @@
 	enum type_qualifier type_qualifier;
 	enum function_specifier function_specifier;
 
-#line 471 "parser.tab.c"
+#line 475 "parser.tab.c"
 
 };
 typedef union YYSTYPE YYSTYPE;
@@ -491,326 +495,331 @@
   YYSYMBOL_aIDENTIFIER = 3,                /* aIDENTIFIER  */
   YYSYMBOL_aPRAGMA = 4,                    /* aPRAGMA  */
   YYSYMBOL_aKNOWNTYPE = 5,                 /* aKNOWNTYPE  */
-  YYSYMBOL_aNUM = 6,                       /* aNUM  */
-  YYSYMBOL_aHEXNUM = 7,                    /* aHEXNUM  */
-  YYSYMBOL_aDOUBLE = 8,                    /* aDOUBLE  */
-  YYSYMBOL_aSTRING = 9,                    /* aSTRING  */
-  YYSYMBOL_aWSTRING = 10,                  /* aWSTRING  */
-  YYSYMBOL_aSQSTRING = 11,                 /* aSQSTRING  */
-  YYSYMBOL_aUUID = 12,                     /* aUUID  */
-  YYSYMBOL_aEOF = 13,                      /* aEOF  */
-  YYSYMBOL_aACF = 14,                      /* aACF  */
-  YYSYMBOL_SHL = 15,                       /* SHL  */
-  YYSYMBOL_SHR = 16,                       /* SHR  */
-  YYSYMBOL_MEMBERPTR = 17,                 /* MEMBERPTR  */
-  YYSYMBOL_EQUALITY = 18,                  /* EQUALITY  */
-  YYSYMBOL_INEQUALITY = 19,                /* INEQUALITY  */
-  YYSYMBOL_GREATEREQUAL = 20,              /* GREATEREQUAL  */
-  YYSYMBOL_LESSEQUAL = 21,                 /* LESSEQUAL  */
-  YYSYMBOL_LOGICALOR = 22,                 /* LOGICALOR  */
-  YYSYMBOL_LOGICALAND = 23,                /* LOGICALAND  */
-  YYSYMBOL_ELLIPSIS = 24,                  /* ELLIPSIS  */
-  YYSYMBOL_tAGGREGATABLE = 25,             /* tAGGREGATABLE  */
-  YYSYMBOL_tALLOCATE = 26,                 /* tALLOCATE  */
-  YYSYMBOL_tANNOTATION = 27,               /* tANNOTATION  */
-  YYSYMBOL_tAPPOBJECT = 28,                /* tAPPOBJECT  */
-  YYSYMBOL_tASYNC = 29,                    /* tASYNC  */
-  YYSYMBOL_tASYNCUUID = 30,                /* tASYNCUUID  */
-  YYSYMBOL_tAUTOHANDLE = 31,               /* tAUTOHANDLE  */
-  YYSYMBOL_tBINDABLE = 32,                 /* tBINDABLE  */
-  YYSYMBOL_tBOOLEAN = 33,                  /* tBOOLEAN  */
-  YYSYMBOL_tBROADCAST = 34,                /* tBROADCAST  */
-  YYSYMBOL_tBYTE = 35,                     /* tBYTE  */
-  YYSYMBOL_tBYTECOUNT = 36,                /* tBYTECOUNT  */
-  YYSYMBOL_tCALLAS = 37,                   /* tCALLAS  */
-  YYSYMBOL_tCALLBACK = 38,                 /* tCALLBACK  */
-  YYSYMBOL_tCASE = 39,                     /* tCASE  */
-  YYSYMBOL_tCDECL = 40,                    /* tCDECL  */
-  YYSYMBOL_tCHAR = 41,                     /* tCHAR  */
-  YYSYMBOL_tCOCLASS = 42,                  /* tCOCLASS  */
-  YYSYMBOL_tCODE = 43,                     /* tCODE  */
-  YYSYMBOL_tCOMMSTATUS = 44,               /* tCOMMSTATUS  */
-  YYSYMBOL_tCONST = 45,                    /* tCONST  */
-  YYSYMBOL_tCONTEXTHANDLE = 46,            /* tCONTEXTHANDLE  */
-  YYSYMBOL_tCONTEXTHANDLENOSERIALIZE = 47, /* tCONTEXTHANDLENOSERIALIZE  */
-  YYSYMBOL_tCONTEXTHANDLESERIALIZE = 48,   /* tCONTEXTHANDLESERIALIZE  */
-  YYSYMBOL_tCONTROL = 49,                  /* tCONTROL  */
-  YYSYMBOL_tCPPQUOTE = 50,                 /* tCPPQUOTE  */
-  YYSYMBOL_tDECODE = 51,                   /* tDECODE  */
-  YYSYMBOL_tDEFAULT = 52,                  /* tDEFAULT  */
-  YYSYMBOL_tDEFAULTBIND = 53,              /* tDEFAULTBIND  */
-  YYSYMBOL_tDEFAULTCOLLELEM = 54,          /* tDEFAULTCOLLELEM  */
-  YYSYMBOL_tDEFAULTVALUE = 55,             /* tDEFAULTVALUE  */
-  YYSYMBOL_tDEFAULTVTABLE = 56,            /* tDEFAULTVTABLE  */
-  YYSYMBOL_tDISABLECONSISTENCYCHECK = 57,  /* tDISABLECONSISTENCYCHECK  */
-  YYSYMBOL_tDISPLAYBIND = 58,              /* tDISPLAYBIND  */
-  YYSYMBOL_tDISPINTERFACE = 59,            /* tDISPINTERFACE  */
-  YYSYMBOL_tDLLNAME = 60,                  /* tDLLNAME  */
-  YYSYMBOL_tDOUBLE = 61,                   /* tDOUBLE  */
-  YYSYMBOL_tDUAL = 62,                     /* tDUAL  */
-  YYSYMBOL_tENABLEALLOCATE = 63,           /* tENABLEALLOCATE  */
-  YYSYMBOL_tENCODE = 64,                   /* tENCODE  */
-  YYSYMBOL_tENDPOINT = 65,                 /* tENDPOINT  */
-  YYSYMBOL_tENTRY = 66,                    /* tENTRY  */
-  YYSYMBOL_tENUM = 67,                     /* tENUM  */
-  YYSYMBOL_tERRORSTATUST = 68,             /* tERRORSTATUST  */
-  YYSYMBOL_tEXPLICITHANDLE = 69,           /* tEXPLICITHANDLE  */
-  YYSYMBOL_tEXTERN = 70,                   /* tEXTERN  */
-  YYSYMBOL_tFALSE = 71,                    /* tFALSE  */
-  YYSYMBOL_tFASTCALL = 72,                 /* tFASTCALL  */
-  YYSYMBOL_tFAULTSTATUS = 73,              /* tFAULTSTATUS  */
-  YYSYMBOL_tFLOAT = 74,                    /* tFLOAT  */
-  YYSYMBOL_tFORCEALLOCATE = 75,            /* tFORCEALLOCATE  */
-  YYSYMBOL_tHANDLE = 76,                   /* tHANDLE  */
-  YYSYMBOL_tHANDLET = 77,                  /* tHANDLET  */
-  YYSYMBOL_tHELPCONTEXT = 78,              /* tHELPCONTEXT  */
-  YYSYMBOL_tHELPFILE = 79,                 /* tHELPFILE  */
-  YYSYMBOL_tHELPSTRING = 80,               /* tHELPSTRING  */
-  YYSYMBOL_tHELPSTRINGCONTEXT = 81,        /* tHELPSTRINGCONTEXT  */
-  YYSYMBOL_tHELPSTRINGDLL = 82,            /* tHELPSTRINGDLL  */
-  YYSYMBOL_tHIDDEN = 83,                   /* tHIDDEN  */
-  YYSYMBOL_tHYPER = 84,                    /* tHYPER  */
-  YYSYMBOL_tID = 85,                       /* tID  */
-  YYSYMBOL_tIDEMPOTENT = 86,               /* tIDEMPOTENT  */
-  YYSYMBOL_tIGNORE = 87,                   /* tIGNORE  */
-  YYSYMBOL_tIIDIS = 88,                    /* tIIDIS  */
-  YYSYMBOL_tIMMEDIATEBIND = 89,            /* tIMMEDIATEBIND  */
-  YYSYMBOL_tIMPLICITHANDLE = 90,           /* tIMPLICITHANDLE  */
-  YYSYMBOL_tIMPORT = 91,                   /* tIMPORT  */
-  YYSYMBOL_tIMPORTLIB = 92,                /* tIMPORTLIB  */
-  YYSYMBOL_tIN = 93,                       /* tIN  */
-  YYSYMBOL_tIN_LINE = 94,                  /* tIN_LINE  */
-  YYSYMBOL_tINLINE = 95,                   /* tINLINE  */
-  YYSYMBOL_tINPUTSYNC = 96,                /* tINPUTSYNC  */
-  YYSYMBOL_tINT = 97,                      /* tINT  */
-  YYSYMBOL_tINT32 = 98,                    /* tINT32  */
-  YYSYMBOL_tINT3264 = 99,                  /* tINT3264  */
-  YYSYMBOL_tINT64 = 100,                   /* tINT64  */
-  YYSYMBOL_tINTERFACE = 101,               /* tINTERFACE  */
-  YYSYMBOL_tLCID = 102,                    /* tLCID  */
-  YYSYMBOL_tLENGTHIS = 103,                /* tLENGTHIS  */
-  YYSYMBOL_tLIBRARY = 104,                 /* tLIBRARY  */
-  YYSYMBOL_tLICENSED = 105,                /* tLICENSED  */
-  YYSYMBOL_tLOCAL = 106,                   /* tLOCAL  */
-  YYSYMBOL_tLONG = 107,                    /* tLONG  */
-  YYSYMBOL_tMAYBE = 108,                   /* tMAYBE  */
-  YYSYMBOL_tMESSAGE = 109,                 /* tMESSAGE  */
-  YYSYMBOL_tMETHODS = 110,                 /* tMETHODS  */
-  YYSYMBOL_tMODULE = 111,                  /* tMODULE  */
-  YYSYMBOL_tNAMESPACE = 112,               /* tNAMESPACE  */
-  YYSYMBOL_tNOCODE = 113,                  /* tNOCODE  */
-  YYSYMBOL_tNONBROWSABLE = 114,            /* tNONBROWSABLE  */
-  YYSYMBOL_tNONCREATABLE = 115,            /* tNONCREATABLE  */
-  YYSYMBOL_tNONEXTENSIBLE = 116,           /* tNONEXTENSIBLE  */
-  YYSYMBOL_tNOTIFY = 117,                  /* tNOTIFY  */
-  YYSYMBOL_tNOTIFYFLAG = 118,              /* tNOTIFYFLAG  */
-  YYSYMBOL_tNULL = 119,                    /* tNULL  */
-  YYSYMBOL_tOBJECT = 120,                  /* tOBJECT  */
-  YYSYMBOL_tODL = 121,                     /* tODL  */
-  YYSYMBOL_tOLEAUTOMATION = 122,           /* tOLEAUTOMATION  */
-  YYSYMBOL_tOPTIMIZE = 123,                /* tOPTIMIZE  */
-  YYSYMBOL_tOPTIONAL = 124,                /* tOPTIONAL  */
-  YYSYMBOL_tOUT = 125,                     /* tOUT  */
-  YYSYMBOL_tPARTIALIGNORE = 126,           /* tPARTIALIGNORE  */
-  YYSYMBOL_tPASCAL = 127,                  /* tPASCAL  */
-  YYSYMBOL_tPOINTERDEFAULT = 128,          /* tPOINTERDEFAULT  */
-  YYSYMBOL_tPRAGMA_WARNING = 129,          /* tPRAGMA_WARNING  */
-  YYSYMBOL_tPROGID = 130,                  /* tPROGID  */
-  YYSYMBOL_tPROPERTIES = 131,              /* tPROPERTIES  */
-  YYSYMBOL_tPROPGET = 132,                 /* tPROPGET  */
-  YYSYMBOL_tPROPPUT = 133,                 /* tPROPPUT  */
-  YYSYMBOL_tPROPPUTREF = 134,              /* tPROPPUTREF  */
-  YYSYMBOL_tPROXY = 135,                   /* tPROXY  */
-  YYSYMBOL_tPTR = 136,                     /* tPTR  */
-  YYSYMBOL_tPUBLIC = 137,                  /* tPUBLIC  */
-  YYSYMBOL_tRANGE = 138,                   /* tRANGE  */
-  YYSYMBOL_tREADONLY = 139,                /* tREADONLY  */
-  YYSYMBOL_tREF = 140,                     /* tREF  */
-  YYSYMBOL_tREGISTER = 141,                /* tREGISTER  */
-  YYSYMBOL_tREPRESENTAS = 142,             /* tREPRESENTAS  */
-  YYSYMBOL_tREQUESTEDIT = 143,             /* tREQUESTEDIT  */
-  YYSYMBOL_tRESTRICTED = 144,              /* tRESTRICTED  */
-  YYSYMBOL_tRETVAL = 145,                  /* tRETVAL  */
-  YYSYMBOL_tSAFEARRAY = 146,               /* tSAFEARRAY  */
-  YYSYMBOL_tSHORT = 147,                   /* tSHORT  */
-  YYSYMBOL_tSIGNED = 148,                  /* tSIGNED  */
-  YYSYMBOL_tSIZEIS = 149,                  /* tSIZEIS  */
-  YYSYMBOL_tSIZEOF = 150,                  /* tSIZEOF  */
-  YYSYMBOL_tSMALL = 151,                   /* tSMALL  */
-  YYSYMBOL_tSOURCE = 152,                  /* tSOURCE  */
-  YYSYMBOL_tSTATIC = 153,                  /* tSTATIC  */
-  YYSYMBOL_tSTDCALL = 154,                 /* tSTDCALL  */
-  YYSYMBOL_tSTRICTCONTEXTHANDLE = 155,     /* tSTRICTCONTEXTHANDLE  */
-  YYSYMBOL_tSTRING = 156,                  /* tSTRING  */
-  YYSYMBOL_tSTRUCT = 157,                  /* tSTRUCT  */
-  YYSYMBOL_tSWITCH = 158,                  /* tSWITCH  */
-  YYSYMBOL_tSWITCHIS = 159,                /* tSWITCHIS  */
-  YYSYMBOL_tSWITCHTYPE = 160,              /* tSWITCHTYPE  */
-  YYSYMBOL_tTHREADING = 161,               /* tTHREADING  */
-  YYSYMBOL_tTRANSMITAS = 162,              /* tTRANSMITAS  */
-  YYSYMBOL_tTRUE = 163,                    /* tTRUE  */
-  YYSYMBOL_tTYPEDEF = 164,                 /* tTYPEDEF  */
-  YYSYMBOL_tUIDEFAULT = 165,               /* tUIDEFAULT  */
-  YYSYMBOL_tUNION = 166,                   /* tUNION  */
-  YYSYMBOL_tUNIQUE = 167,                  /* tUNIQUE  */
-  YYSYMBOL_tUNSIGNED = 168,                /* tUNSIGNED  */
-  YYSYMBOL_tUSESGETLASTERROR = 169,        /* tUSESGETLASTERROR  */
-  YYSYMBOL_tUSERMARSHAL = 170,             /* tUSERMARSHAL  */
-  YYSYMBOL_tUUID = 171,                    /* tUUID  */
-  YYSYMBOL_tV1ENUM = 172,                  /* tV1ENUM  */
-  YYSYMBOL_tVARARG = 173,                  /* tVARARG  */
-  YYSYMBOL_tVERSION = 174,                 /* tVERSION  */
-  YYSYMBOL_tVIPROGID = 175,                /* tVIPROGID  */
-  YYSYMBOL_tVOID = 176,                    /* tVOID  */
-  YYSYMBOL_tWCHAR = 177,                   /* tWCHAR  */
-  YYSYMBOL_tWIREMARSHAL = 178,             /* tWIREMARSHAL  */
-  YYSYMBOL_tAPARTMENT = 179,               /* tAPARTMENT  */
-  YYSYMBOL_tNEUTRAL = 180,                 /* tNEUTRAL  */
-  YYSYMBOL_tSINGLE = 181,                  /* tSINGLE  */
-  YYSYMBOL_tFREE = 182,                    /* tFREE  */
-  YYSYMBOL_tBOTH = 183,                    /* tBOTH  */
-  YYSYMBOL_184_ = 184,                     /* ','  */
-  YYSYMBOL_185_ = 185,                     /* '?'  */
-  YYSYMBOL_186_ = 186,                     /* ':'  */
-  YYSYMBOL_187_ = 187,                     /* '|'  */
-  YYSYMBOL_188_ = 188,                     /* '^'  */
-  YYSYMBOL_189_ = 189,                     /* '&'  */
-  YYSYMBOL_190_ = 190,                     /* '<'  */
-  YYSYMBOL_191_ = 191,                     /* '>'  */
-  YYSYMBOL_192_ = 192,                     /* '-'  */
-  YYSYMBOL_193_ = 193,                     /* '+'  */
-  YYSYMBOL_194_ = 194,                     /* '*'  */
-  YYSYMBOL_195_ = 195,                     /* '/'  */
-  YYSYMBOL_196_ = 196,                     /* '%'  */
-  YYSYMBOL_197_ = 197,                     /* '!'  */
-  YYSYMBOL_198_ = 198,                     /* '~'  */
-  YYSYMBOL_CAST = 199,                     /* CAST  */
-  YYSYMBOL_PPTR = 200,                     /* PPTR  */
-  YYSYMBOL_POS = 201,                      /* POS  */
-  YYSYMBOL_NEG = 202,                      /* NEG  */
-  YYSYMBOL_ADDRESSOF = 203,                /* ADDRESSOF  */
-  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_YYACCEPT = 213,                 /* $accept  */
-  YYSYMBOL_input = 214,                    /* input  */
-  YYSYMBOL_m_acf = 215,                    /* m_acf  */
-  YYSYMBOL_gbl_statements = 216,           /* gbl_statements  */
-  YYSYMBOL_217_1 = 217,                    /* $@1  */
-  YYSYMBOL_imp_statements = 218,           /* imp_statements  */
-  YYSYMBOL_219_2 = 219,                    /* $@2  */
-  YYSYMBOL_int_statements = 220,           /* int_statements  */
-  YYSYMBOL_semicolon_opt = 221,            /* semicolon_opt  */
-  YYSYMBOL_statement = 222,                /* statement  */
-  YYSYMBOL_pragma_warning = 223,           /* pragma_warning  */
-  YYSYMBOL_warnings = 224,                 /* warnings  */
-  YYSYMBOL_typedecl = 225,                 /* typedecl  */
-  YYSYMBOL_cppquote = 226,                 /* cppquote  */
-  YYSYMBOL_import_start = 227,             /* import_start  */
-  YYSYMBOL_import = 228,                   /* import  */
-  YYSYMBOL_importlib = 229,                /* importlib  */
-  YYSYMBOL_libraryhdr = 230,               /* libraryhdr  */
-  YYSYMBOL_library_start = 231,            /* library_start  */
-  YYSYMBOL_librarydef = 232,               /* librarydef  */
-  YYSYMBOL_m_args = 233,                   /* m_args  */
-  YYSYMBOL_arg_list = 234,                 /* arg_list  */
-  YYSYMBOL_args = 235,                     /* args  */
-  YYSYMBOL_arg = 236,                      /* arg  */
-  YYSYMBOL_array = 237,                    /* array  */
-  YYSYMBOL_m_attributes = 238,             /* m_attributes  */
-  YYSYMBOL_attributes = 239,               /* attributes  */
-  YYSYMBOL_attrib_list = 240,              /* attrib_list  */
-  YYSYMBOL_str_list = 241,                 /* str_list  */
-  YYSYMBOL_attribute = 242,                /* attribute  */
-  YYSYMBOL_uuid_string = 243,              /* uuid_string  */
-  YYSYMBOL_callconv = 244,                 /* callconv  */
-  YYSYMBOL_cases = 245,                    /* cases  */
-  YYSYMBOL_case = 246,                     /* case  */
-  YYSYMBOL_enums = 247,                    /* enums  */
-  YYSYMBOL_enum_list = 248,                /* enum_list  */
-  YYSYMBOL_enum = 249,                     /* enum  */
-  YYSYMBOL_enumdef = 250,                  /* enumdef  */
-  YYSYMBOL_m_exprs = 251,                  /* m_exprs  */
-  YYSYMBOL_m_expr = 252,                   /* m_expr  */
-  YYSYMBOL_expr = 253,                     /* expr  */
-  YYSYMBOL_expr_list_int_const = 254,      /* expr_list_int_const  */
-  YYSYMBOL_expr_int_const = 255,           /* expr_int_const  */
-  YYSYMBOL_expr_const = 256,               /* expr_const  */
-  YYSYMBOL_fields = 257,                   /* fields  */
-  YYSYMBOL_field = 258,                    /* field  */
-  YYSYMBOL_ne_union_field = 259,           /* ne_union_field  */
-  YYSYMBOL_ne_union_fields = 260,          /* ne_union_fields  */
-  YYSYMBOL_union_field = 261,              /* union_field  */
-  YYSYMBOL_s_field = 262,                  /* s_field  */
-  YYSYMBOL_funcdef = 263,                  /* funcdef  */
-  YYSYMBOL_declaration = 264,              /* declaration  */
-  YYSYMBOL_m_ident = 265,                  /* m_ident  */
-  YYSYMBOL_t_ident = 266,                  /* t_ident  */
-  YYSYMBOL_ident = 267,                    /* ident  */
-  YYSYMBOL_base_type = 268,                /* base_type  */
-  YYSYMBOL_m_int = 269,                    /* m_int  */
-  YYSYMBOL_int_std = 270,                  /* int_std  */
-  YYSYMBOL_coclass = 271,                  /* coclass  */
-  YYSYMBOL_coclasshdr = 272,               /* coclasshdr  */
-  YYSYMBOL_coclassdef = 273,               /* coclassdef  */
-  YYSYMBOL_namespacedef = 274,             /* namespacedef  */
-  YYSYMBOL_coclass_ints = 275,             /* coclass_ints  */
-  YYSYMBOL_coclass_int = 276,              /* coclass_int  */
-  YYSYMBOL_dispinterface = 277,            /* dispinterface  */
-  YYSYMBOL_dispinterfacehdr = 278,         /* dispinterfacehdr  */
-  YYSYMBOL_dispint_props = 279,            /* dispint_props  */
-  YYSYMBOL_dispint_meths = 280,            /* dispint_meths  */
-  YYSYMBOL_dispinterfacedef = 281,         /* dispinterfacedef  */
-  YYSYMBOL_inherit = 282,                  /* inherit  */
-  YYSYMBOL_interface = 283,                /* interface  */
-  YYSYMBOL_interfacehdr = 284,             /* interfacehdr  */
-  YYSYMBOL_interfacedef = 285,             /* interfacedef  */
-  YYSYMBOL_interfacedec = 286,             /* interfacedec  */
-  YYSYMBOL_module = 287,                   /* module  */
-  YYSYMBOL_modulehdr = 288,                /* modulehdr  */
-  YYSYMBOL_moduledef = 289,                /* moduledef  */
-  YYSYMBOL_storage_cls_spec = 290,         /* storage_cls_spec  */
-  YYSYMBOL_function_specifier = 291,       /* function_specifier  */
-  YYSYMBOL_type_qualifier = 292,           /* type_qualifier  */
-  YYSYMBOL_m_type_qual_list = 293,         /* m_type_qual_list  */
-  YYSYMBOL_decl_spec = 294,                /* decl_spec  */
-  YYSYMBOL_m_decl_spec_no_type = 295,      /* m_decl_spec_no_type  */
-  YYSYMBOL_decl_spec_no_type = 296,        /* decl_spec_no_type  */
-  YYSYMBOL_declarator = 297,               /* declarator  */
-  YYSYMBOL_direct_declarator = 298,        /* direct_declarator  */
-  YYSYMBOL_abstract_declarator = 299,      /* abstract_declarator  */
-  YYSYMBOL_abstract_declarator_no_direct = 300, /* abstract_declarator_no_direct  */
-  YYSYMBOL_m_abstract_declarator = 301,    /* m_abstract_declarator  */
-  YYSYMBOL_abstract_direct_declarator = 302, /* abstract_direct_declarator  */
-  YYSYMBOL_any_declarator = 303,           /* any_declarator  */
-  YYSYMBOL_any_declarator_no_direct = 304, /* any_declarator_no_direct  */
-  YYSYMBOL_m_any_declarator = 305,         /* m_any_declarator  */
-  YYSYMBOL_any_direct_declarator = 306,    /* any_direct_declarator  */
-  YYSYMBOL_declarator_list = 307,          /* declarator_list  */
-  YYSYMBOL_m_bitfield = 308,               /* m_bitfield  */
-  YYSYMBOL_struct_declarator = 309,        /* struct_declarator  */
-  YYSYMBOL_struct_declarator_list = 310,   /* struct_declarator_list  */
-  YYSYMBOL_init_declarator = 311,          /* init_declarator  */
-  YYSYMBOL_threading_type = 312,           /* threading_type  */
-  YYSYMBOL_pointer_type = 313,             /* pointer_type  */
-  YYSYMBOL_structdef = 314,                /* structdef  */
-  YYSYMBOL_type = 315,                     /* type  */
-  YYSYMBOL_typedef = 316,                  /* typedef  */
-  YYSYMBOL_uniondef = 317,                 /* uniondef  */
-  YYSYMBOL_version = 318,                  /* version  */
-  YYSYMBOL_acf_statements = 319,           /* acf_statements  */
-  YYSYMBOL_acf_int_statements = 320,       /* acf_int_statements  */
-  YYSYMBOL_acf_int_statement = 321,        /* acf_int_statement  */
-  YYSYMBOL_acf_interface = 322,            /* acf_interface  */
-  YYSYMBOL_acf_attributes = 323,           /* acf_attributes  */
-  YYSYMBOL_acf_attribute_list = 324,       /* acf_attribute_list  */
-  YYSYMBOL_acf_attribute = 325             /* acf_attribute  */
+  YYSYMBOL_aNAMESPACE = 6,                 /* aNAMESPACE  */
+  YYSYMBOL_aNUM = 7,                       /* aNUM  */
+  YYSYMBOL_aHEXNUM = 8,                    /* aHEXNUM  */
+  YYSYMBOL_aDOUBLE = 9,                    /* aDOUBLE  */
+  YYSYMBOL_aSTRING = 10,                   /* aSTRING  */
+  YYSYMBOL_aWSTRING = 11,                  /* aWSTRING  */
+  YYSYMBOL_aSQSTRING = 12,                 /* aSQSTRING  */
+  YYSYMBOL_aUUID = 13,                     /* aUUID  */
+  YYSYMBOL_aEOF = 14,                      /* aEOF  */
+  YYSYMBOL_aACF = 15,                      /* aACF  */
+  YYSYMBOL_SHL = 16,                       /* SHL  */
+  YYSYMBOL_SHR = 17,                       /* SHR  */
+  YYSYMBOL_MEMBERPTR = 18,                 /* MEMBERPTR  */
+  YYSYMBOL_EQUALITY = 19,                  /* EQUALITY  */
+  YYSYMBOL_INEQUALITY = 20,                /* INEQUALITY  */
+  YYSYMBOL_GREATEREQUAL = 21,              /* GREATEREQUAL  */
+  YYSYMBOL_LESSEQUAL = 22,                 /* LESSEQUAL  */
+  YYSYMBOL_LOGICALOR = 23,                 /* LOGICALOR  */
+  YYSYMBOL_LOGICALAND = 24,                /* LOGICALAND  */
+  YYSYMBOL_ELLIPSIS = 25,                  /* ELLIPSIS  */
+  YYSYMBOL_tAGGREGATABLE = 26,             /* tAGGREGATABLE  */
+  YYSYMBOL_tALLOCATE = 27,                 /* tALLOCATE  */
+  YYSYMBOL_tANNOTATION = 28,               /* tANNOTATION  */
+  YYSYMBOL_tAPPOBJECT = 29,                /* tAPPOBJECT  */
+  YYSYMBOL_tASYNC = 30,                    /* tASYNC  */
+  YYSYMBOL_tASYNCUUID = 31,                /* tASYNCUUID  */
+  YYSYMBOL_tAUTOHANDLE = 32,               /* tAUTOHANDLE  */
+  YYSYMBOL_tBINDABLE = 33,                 /* tBINDABLE  */
+  YYSYMBOL_tBOOLEAN = 34,                  /* tBOOLEAN  */
+  YYSYMBOL_tBROADCAST = 35,                /* tBROADCAST  */
+  YYSYMBOL_tBYTE = 36,                     /* tBYTE  */
+  YYSYMBOL_tBYTECOUNT = 37,                /* tBYTECOUNT  */
+  YYSYMBOL_tCALLAS = 38,                   /* tCALLAS  */
+  YYSYMBOL_tCALLBACK = 39,                 /* tCALLBACK  */
+  YYSYMBOL_tCASE = 40,                     /* tCASE  */
+  YYSYMBOL_tCDECL = 41,                    /* tCDECL  */
+  YYSYMBOL_tCHAR = 42,                     /* tCHAR  */
+  YYSYMBOL_tCOCLASS = 43,                  /* tCOCLASS  */
+  YYSYMBOL_tCODE = 44,                     /* tCODE  */
+  YYSYMBOL_tCOMMSTATUS = 45,               /* tCOMMSTATUS  */
+  YYSYMBOL_tCONST = 46,                    /* tCONST  */
+  YYSYMBOL_tCONTEXTHANDLE = 47,            /* tCONTEXTHANDLE  */
+  YYSYMBOL_tCONTEXTHANDLENOSERIALIZE = 48, /* tCONTEXTHANDLENOSERIALIZE  */
+  YYSYMBOL_tCONTEXTHANDLESERIALIZE = 49,   /* tCONTEXTHANDLESERIALIZE  */
+  YYSYMBOL_tCONTROL = 50,                  /* tCONTROL  */
+  YYSYMBOL_tCPPQUOTE = 51,                 /* tCPPQUOTE  */
+  YYSYMBOL_tDECODE = 52,                   /* tDECODE  */
+  YYSYMBOL_tDEFAULT = 53,                  /* tDEFAULT  */
+  YYSYMBOL_tDEFAULTBIND = 54,              /* tDEFAULTBIND  */
+  YYSYMBOL_tDEFAULTCOLLELEM = 55,          /* tDEFAULTCOLLELEM  */
+  YYSYMBOL_tDEFAULTVALUE = 56,             /* tDEFAULTVALUE  */
+  YYSYMBOL_tDEFAULTVTABLE = 57,            /* tDEFAULTVTABLE  */
+  YYSYMBOL_tDISABLECONSISTENCYCHECK = 58,  /* tDISABLECONSISTENCYCHECK  */
+  YYSYMBOL_tDISPLAYBIND = 59,              /* tDISPLAYBIND  */
+  YYSYMBOL_tDISPINTERFACE = 60,            /* tDISPINTERFACE  */
+  YYSYMBOL_tDLLNAME = 61,                  /* tDLLNAME  */
+  YYSYMBOL_tDOUBLE = 62,                   /* tDOUBLE  */
+  YYSYMBOL_tDUAL = 63,                     /* tDUAL  */
+  YYSYMBOL_tENABLEALLOCATE = 64,           /* tENABLEALLOCATE  */
+  YYSYMBOL_tENCODE = 65,                   /* tENCODE  */
+  YYSYMBOL_tENDPOINT = 66,                 /* tENDPOINT  */
+  YYSYMBOL_tENTRY = 67,                    /* tENTRY  */
+  YYSYMBOL_tENUM = 68,                     /* tENUM  */
+  YYSYMBOL_tERRORSTATUST = 69,             /* tERRORSTATUST  */
+  YYSYMBOL_tEXPLICITHANDLE = 70,           /* tEXPLICITHANDLE  */
+  YYSYMBOL_tEXTERN = 71,                   /* tEXTERN  */
+  YYSYMBOL_tFALSE = 72,                    /* tFALSE  */
+  YYSYMBOL_tFASTCALL = 73,                 /* tFASTCALL  */
+  YYSYMBOL_tFAULTSTATUS = 74,              /* tFAULTSTATUS  */
+  YYSYMBOL_tFLOAT = 75,                    /* tFLOAT  */
+  YYSYMBOL_tFORCEALLOCATE = 76,            /* tFORCEALLOCATE  */
+  YYSYMBOL_tHANDLE = 77,                   /* tHANDLE  */
+  YYSYMBOL_tHANDLET = 78,                  /* tHANDLET  */
+  YYSYMBOL_tHELPCONTEXT = 79,              /* tHELPCONTEXT  */
+  YYSYMBOL_tHELPFILE = 80,                 /* tHELPFILE  */
+  YYSYMBOL_tHELPSTRING = 81,               /* tHELPSTRING  */
+  YYSYMBOL_tHELPSTRINGCONTEXT = 82,        /* tHELPSTRINGCONTEXT  */
+  YYSYMBOL_tHELPSTRINGDLL = 83,            /* tHELPSTRINGDLL  */
+  YYSYMBOL_tHIDDEN = 84,                   /* tHIDDEN  */
+  YYSYMBOL_tHYPER = 85,                    /* tHYPER  */
+  YYSYMBOL_tID = 86,                       /* tID  */
+  YYSYMBOL_tIDEMPOTENT = 87,               /* tIDEMPOTENT  */
+  YYSYMBOL_tIGNORE = 88,                   /* tIGNORE  */
+  YYSYMBOL_tIIDIS = 89,                    /* tIIDIS  */
+  YYSYMBOL_tIMMEDIATEBIND = 90,            /* tIMMEDIATEBIND  */
+  YYSYMBOL_tIMPLICITHANDLE = 91,           /* tIMPLICITHANDLE  */
+  YYSYMBOL_tIMPORT = 92,                   /* tIMPORT  */
+  YYSYMBOL_tIMPORTLIB = 93,                /* tIMPORTLIB  */
+  YYSYMBOL_tIN = 94,                       /* tIN  */
+  YYSYMBOL_tIN_LINE = 95,                  /* tIN_LINE  */
+  YYSYMBOL_tINLINE = 96,                   /* tINLINE  */
+  YYSYMBOL_tINPUTSYNC = 97,                /* tINPUTSYNC  */
+  YYSYMBOL_tINT = 98,                      /* tINT  */
+  YYSYMBOL_tINT32 = 99,                    /* tINT32  */
+  YYSYMBOL_tINT3264 = 100,                 /* tINT3264  */
+  YYSYMBOL_tINT64 = 101,                   /* tINT64  */
+  YYSYMBOL_tINTERFACE = 102,               /* tINTERFACE  */
+  YYSYMBOL_tLCID = 103,                    /* tLCID  */
+  YYSYMBOL_tLENGTHIS = 104,                /* tLENGTHIS  */
+  YYSYMBOL_tLIBRARY = 105,                 /* tLIBRARY  */
+  YYSYMBOL_tLICENSED = 106,                /* tLICENSED  */
+  YYSYMBOL_tLOCAL = 107,                   /* tLOCAL  */
+  YYSYMBOL_tLONG = 108,                    /* tLONG  */
+  YYSYMBOL_tMAYBE = 109,                   /* tMAYBE  */
+  YYSYMBOL_tMESSAGE = 110,                 /* tMESSAGE  */
+  YYSYMBOL_tMETHODS = 111,                 /* tMETHODS  */
+  YYSYMBOL_tMODULE = 112,                  /* tMODULE  */
+  YYSYMBOL_tNAMESPACE = 113,               /* tNAMESPACE  */
+  YYSYMBOL_tNOCODE = 114,                  /* tNOCODE  */
+  YYSYMBOL_tNONBROWSABLE = 115,            /* tNONBROWSABLE  */
+  YYSYMBOL_tNONCREATABLE = 116,            /* tNONCREATABLE  */
+  YYSYMBOL_tNONEXTENSIBLE = 117,           /* tNONEXTENSIBLE  */
+  YYSYMBOL_tNOTIFY = 118,                  /* tNOTIFY  */
+  YYSYMBOL_tNOTIFYFLAG = 119,              /* tNOTIFYFLAG  */
+  YYSYMBOL_tNULL = 120,                    /* tNULL  */
+  YYSYMBOL_tOBJECT = 121,                  /* tOBJECT  */
+  YYSYMBOL_tODL = 122,                     /* tODL  */
+  YYSYMBOL_tOLEAUTOMATION = 123,           /* tOLEAUTOMATION  */
+  YYSYMBOL_tOPTIMIZE = 124,                /* tOPTIMIZE  */
+  YYSYMBOL_tOPTIONAL = 125,                /* tOPTIONAL  */
+  YYSYMBOL_tOUT = 126,                     /* tOUT  */
+  YYSYMBOL_tPARTIALIGNORE = 127,           /* tPARTIALIGNORE  */
+  YYSYMBOL_tPASCAL = 128,                  /* tPASCAL  */
+  YYSYMBOL_tPOINTERDEFAULT = 129,          /* tPOINTERDEFAULT  */
+  YYSYMBOL_tPRAGMA_WARNING = 130,          /* tPRAGMA_WARNING  */
+  YYSYMBOL_tPROGID = 131,                  /* tPROGID  */
+  YYSYMBOL_tPROPERTIES = 132,              /* tPROPERTIES  */
+  YYSYMBOL_tPROPGET = 133,                 /* tPROPGET  */
+  YYSYMBOL_tPROPPUT = 134,                 /* tPROPPUT  */
+  YYSYMBOL_tPROPPUTREF = 135,              /* tPROPPUTREF  */
+  YYSYMBOL_tPROXY = 136,                   /* tPROXY  */
+  YYSYMBOL_tPTR = 137,                     /* tPTR  */
+  YYSYMBOL_tPUBLIC = 138,                  /* tPUBLIC  */
+  YYSYMBOL_tRANGE = 139,                   /* tRANGE  */
+  YYSYMBOL_tREADONLY = 140,                /* tREADONLY  */
+  YYSYMBOL_tREF = 141,                     /* tREF  */
+  YYSYMBOL_tREGISTER = 142,                /* tREGISTER  */
+  YYSYMBOL_tREPRESENTAS = 143,             /* tREPRESENTAS  */
+  YYSYMBOL_tREQUESTEDIT = 144,             /* tREQUESTEDIT  */
+  YYSYMBOL_tRESTRICTED = 145,              /* tRESTRICTED  */
+  YYSYMBOL_tRETVAL = 146,                  /* tRETVAL  */
+  YYSYMBOL_tSAFEARRAY = 147,               /* tSAFEARRAY  */
+  YYSYMBOL_tSHORT = 148,                   /* tSHORT  */
+  YYSYMBOL_tSIGNED = 149,                  /* tSIGNED  */
+  YYSYMBOL_tSIZEIS = 150,                  /* tSIZEIS  */
+  YYSYMBOL_tSIZEOF = 151,                  /* tSIZEOF  */
+  YYSYMBOL_tSMALL = 152,                   /* tSMALL  */
+  YYSYMBOL_tSOURCE = 153,                  /* tSOURCE  */
+  YYSYMBOL_tSTATIC = 154,                  /* tSTATIC  */
+  YYSYMBOL_tSTDCALL = 155,                 /* tSTDCALL  */
+  YYSYMBOL_tSTRICTCONTEXTHANDLE = 156,     /* tSTRICTCONTEXTHANDLE  */
+  YYSYMBOL_tSTRING = 157,                  /* tSTRING  */
+  YYSYMBOL_tSTRUCT = 158,                  /* tSTRUCT  */
+  YYSYMBOL_tSWITCH = 159,                  /* tSWITCH  */
+  YYSYMBOL_tSWITCHIS = 160,                /* tSWITCHIS  */
+  YYSYMBOL_tSWITCHTYPE = 161,              /* tSWITCHTYPE  */
+  YYSYMBOL_tTHREADING = 162,               /* tTHREADING  */
+  YYSYMBOL_tTRANSMITAS = 163,              /* tTRANSMITAS  */
+  YYSYMBOL_tTRUE = 164,                    /* tTRUE  */
+  YYSYMBOL_tTYPEDEF = 165,                 /* tTYPEDEF  */
+  YYSYMBOL_tUIDEFAULT = 166,               /* tUIDEFAULT  */
+  YYSYMBOL_tUNION = 167,                   /* tUNION  */
+  YYSYMBOL_tUNIQUE = 168,                  /* tUNIQUE  */
+  YYSYMBOL_tUNSIGNED = 169,                /* tUNSIGNED  */
+  YYSYMBOL_tUSESGETLASTERROR = 170,        /* tUSESGETLASTERROR  */
+  YYSYMBOL_tUSERMARSHAL = 171,             /* tUSERMARSHAL  */
+  YYSYMBOL_tUUID = 172,                    /* tUUID  */
+  YYSYMBOL_tV1ENUM = 173,                  /* tV1ENUM  */
+  YYSYMBOL_tVARARG = 174,                  /* tVARARG  */
+  YYSYMBOL_tVERSION = 175,                 /* tVERSION  */
+  YYSYMBOL_tVIPROGID = 176,                /* tVIPROGID  */
+  YYSYMBOL_tVOID = 177,                    /* tVOID  */
+  YYSYMBOL_tWCHAR = 178,                   /* tWCHAR  */
+  YYSYMBOL_tWIREMARSHAL = 179,             /* tWIREMARSHAL  */
+  YYSYMBOL_tAPARTMENT = 180,               /* tAPARTMENT  */
+  YYSYMBOL_tNEUTRAL = 181,                 /* tNEUTRAL  */
+  YYSYMBOL_tSINGLE = 182,                  /* tSINGLE  */
+  YYSYMBOL_tFREE = 183,                    /* tFREE  */
+  YYSYMBOL_tBOTH = 184,                    /* tBOTH  */
+  YYSYMBOL_185_ = 185,                     /* ','  */
+  YYSYMBOL_186_ = 186,                     /* '?'  */
+  YYSYMBOL_187_ = 187,                     /* ':'  */
+  YYSYMBOL_188_ = 188,                     /* '|'  */
+  YYSYMBOL_189_ = 189,                     /* '^'  */
+  YYSYMBOL_190_ = 190,                     /* '&'  */
+  YYSYMBOL_191_ = 191,                     /* '<'  */
+  YYSYMBOL_192_ = 192,                     /* '>'  */
+  YYSYMBOL_193_ = 193,                     /* '-'  */
+  YYSYMBOL_194_ = 194,                     /* '+'  */
+  YYSYMBOL_195_ = 195,                     /* '*'  */
+  YYSYMBOL_196_ = 196,                     /* '/'  */
+  YYSYMBOL_197_ = 197,                     /* '%'  */
+  YYSYMBOL_198_ = 198,                     /* '!'  */
+  YYSYMBOL_199_ = 199,                     /* '~'  */
+  YYSYMBOL_CAST = 200,                     /* CAST  */
+  YYSYMBOL_PPTR = 201,                     /* PPTR  */
+  YYSYMBOL_POS = 202,                      /* POS  */
+  YYSYMBOL_NEG = 203,                      /* NEG  */
+  YYSYMBOL_ADDRESSOF = 204,                /* ADDRESSOF  */
+  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_YYACCEPT = 214,                 /* $accept  */
+  YYSYMBOL_input = 215,                    /* input  */
+  YYSYMBOL_m_acf = 216,                    /* m_acf  */
+  YYSYMBOL_gbl_statements = 217,           /* gbl_statements  */
+  YYSYMBOL_218_1 = 218,                    /* $@1  */
+  YYSYMBOL_imp_statements = 219,           /* imp_statements  */
+  YYSYMBOL_220_2 = 220,                    /* $@2  */
+  YYSYMBOL_int_statements = 221,           /* int_statements  */
+  YYSYMBOL_semicolon_opt = 222,            /* semicolon_opt  */
+  YYSYMBOL_statement = 223,                /* statement  */
+  YYSYMBOL_pragma_warning = 224,           /* pragma_warning  */
+  YYSYMBOL_warnings = 225,                 /* warnings  */
+  YYSYMBOL_typedecl = 226,                 /* typedecl  */
+  YYSYMBOL_cppquote = 227,                 /* cppquote  */
+  YYSYMBOL_import_start = 228,             /* import_start  */
+  YYSYMBOL_import = 229,                   /* import  */
+  YYSYMBOL_importlib = 230,                /* importlib  */
+  YYSYMBOL_libraryhdr = 231,               /* libraryhdr  */
+  YYSYMBOL_library_start = 232,            /* library_start  */
+  YYSYMBOL_librarydef = 233,               /* librarydef  */
+  YYSYMBOL_m_args = 234,                   /* m_args  */
+  YYSYMBOL_arg_list = 235,                 /* arg_list  */
+  YYSYMBOL_args = 236,                     /* args  */
+  YYSYMBOL_arg = 237,                      /* arg  */
+  YYSYMBOL_array = 238,                    /* array  */
+  YYSYMBOL_m_attributes = 239,             /* m_attributes  */
+  YYSYMBOL_attributes = 240,               /* attributes  */
+  YYSYMBOL_attrib_list = 241,              /* attrib_list  */
+  YYSYMBOL_str_list = 242,                 /* str_list  */
+  YYSYMBOL_attribute = 243,                /* attribute  */
+  YYSYMBOL_uuid_string = 244,              /* uuid_string  */
+  YYSYMBOL_callconv = 245,                 /* callconv  */
+  YYSYMBOL_cases = 246,                    /* cases  */
+  YYSYMBOL_case = 247,                     /* case  */
+  YYSYMBOL_enums = 248,                    /* enums  */
+  YYSYMBOL_enum_list = 249,                /* enum_list  */
+  YYSYMBOL_enum = 250,                     /* enum  */
+  YYSYMBOL_enumdef = 251,                  /* enumdef  */
+  YYSYMBOL_m_exprs = 252,                  /* m_exprs  */
+  YYSYMBOL_m_expr = 253,                   /* m_expr  */
+  YYSYMBOL_expr = 254,                     /* expr  */
+  YYSYMBOL_expr_list_int_const = 255,      /* expr_list_int_const  */
+  YYSYMBOL_expr_int_const = 256,           /* expr_int_const  */
+  YYSYMBOL_expr_const = 257,               /* expr_const  */
+  YYSYMBOL_fields = 258,                   /* fields  */
+  YYSYMBOL_field = 259,                    /* field  */
+  YYSYMBOL_ne_union_field = 260,           /* ne_union_field  */
+  YYSYMBOL_ne_union_fields = 261,          /* ne_union_fields  */
+  YYSYMBOL_union_field = 262,              /* union_field  */
+  YYSYMBOL_s_field = 263,                  /* s_field  */
+  YYSYMBOL_funcdef = 264,                  /* funcdef  */
+  YYSYMBOL_declaration = 265,              /* declaration  */
+  YYSYMBOL_m_ident = 266,                  /* m_ident  */
+  YYSYMBOL_t_ident = 267,                  /* t_ident  */
+  YYSYMBOL_ident = 268,                    /* ident  */
+  YYSYMBOL_base_type = 269,                /* base_type  */
+  YYSYMBOL_m_int = 270,                    /* m_int  */
+  YYSYMBOL_int_std = 271,                  /* int_std  */
+  YYSYMBOL_qualified_seq = 272,            /* qualified_seq  */
+  YYSYMBOL_273_3 = 273,                    /* $@3  */
+  YYSYMBOL_qualified_type = 274,           /* qualified_type  */
+  YYSYMBOL_275_4 = 275,                    /* $@4  */
+  YYSYMBOL_coclass = 276,                  /* coclass  */
+  YYSYMBOL_coclasshdr = 277,               /* coclasshdr  */
+  YYSYMBOL_coclassdef = 278,               /* coclassdef  */
+  YYSYMBOL_namespacedef = 279,             /* namespacedef  */
+  YYSYMBOL_coclass_ints = 280,             /* coclass_ints  */
+  YYSYMBOL_coclass_int = 281,              /* coclass_int  */
+  YYSYMBOL_dispinterface = 282,            /* dispinterface  */
+  YYSYMBOL_dispinterfacehdr = 283,         /* dispinterfacehdr  */
+  YYSYMBOL_dispint_props = 284,            /* dispint_props  */
+  YYSYMBOL_dispint_meths = 285,            /* dispint_meths  */
+  YYSYMBOL_dispinterfacedef = 286,         /* dispinterfacedef  */
+  YYSYMBOL_inherit = 287,                  /* inherit  */
+  YYSYMBOL_interface = 288,                /* interface  */
+  YYSYMBOL_interfacehdr = 289,             /* interfacehdr  */
+  YYSYMBOL_interfacedef = 290,             /* interfacedef  */
+  YYSYMBOL_interfacedec = 291,             /* interfacedec  */
+  YYSYMBOL_module = 292,                   /* module  */
+  YYSYMBOL_modulehdr = 293,                /* modulehdr  */
+  YYSYMBOL_moduledef = 294,                /* moduledef  */
+  YYSYMBOL_storage_cls_spec = 295,         /* storage_cls_spec  */
+  YYSYMBOL_function_specifier = 296,       /* function_specifier  */
+  YYSYMBOL_type_qualifier = 297,           /* type_qualifier  */
+  YYSYMBOL_m_type_qual_list = 298,         /* m_type_qual_list  */
+  YYSYMBOL_decl_spec = 299,                /* decl_spec  */
+  YYSYMBOL_m_decl_spec_no_type = 300,      /* m_decl_spec_no_type  */
+  YYSYMBOL_decl_spec_no_type = 301,        /* decl_spec_no_type  */
+  YYSYMBOL_declarator = 302,               /* declarator  */
+  YYSYMBOL_direct_declarator = 303,        /* direct_declarator  */
+  YYSYMBOL_abstract_declarator = 304,      /* abstract_declarator  */
+  YYSYMBOL_abstract_declarator_no_direct = 305, /* abstract_declarator_no_direct  */
+  YYSYMBOL_m_abstract_declarator = 306,    /* m_abstract_declarator  */
+  YYSYMBOL_abstract_direct_declarator = 307, /* abstract_direct_declarator  */
+  YYSYMBOL_any_declarator = 308,           /* any_declarator  */
+  YYSYMBOL_any_declarator_no_direct = 309, /* any_declarator_no_direct  */
+  YYSYMBOL_m_any_declarator = 310,         /* m_any_declarator  */
+  YYSYMBOL_any_direct_declarator = 311,    /* any_direct_declarator  */
+  YYSYMBOL_declarator_list = 312,          /* declarator_list  */
+  YYSYMBOL_m_bitfield = 313,               /* m_bitfield  */
+  YYSYMBOL_struct_declarator = 314,        /* struct_declarator  */
+  YYSYMBOL_struct_declarator_list = 315,   /* struct_declarator_list  */
+  YYSYMBOL_init_declarator = 316,          /* init_declarator  */
+  YYSYMBOL_threading_type = 317,           /* threading_type  */
+  YYSYMBOL_pointer_type = 318,             /* pointer_type  */
+  YYSYMBOL_structdef = 319,                /* structdef  */
+  YYSYMBOL_type = 320,                     /* type  */
+  YYSYMBOL_typedef = 321,                  /* typedef  */
+  YYSYMBOL_uniondef = 322,                 /* uniondef  */
+  YYSYMBOL_version = 323,                  /* version  */
+  YYSYMBOL_acf_statements = 324,           /* acf_statements  */
+  YYSYMBOL_acf_int_statements = 325,       /* acf_int_statements  */
+  YYSYMBOL_acf_int_statement = 326,        /* acf_int_statement  */
+  YYSYMBOL_acf_interface = 327,            /* acf_interface  */
+  YYSYMBOL_acf_attributes = 328,           /* acf_attributes  */
+  YYSYMBOL_acf_attribute_list = 329,       /* acf_attribute_list  */
+  YYSYMBOL_acf_attribute = 330             /* acf_attribute  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -1120,18 +1129,19 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  3
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3047
+#define YYLAST   3205
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  213
+#define YYNTOKENS  214
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  113
+#define YYNNTS  117
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  410
+#define YYNRULES  417
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  718
+#define YYNSTATES  729
 
-#define YYMAXUTOK   443
+/* YYMAXUTOK -- Last valid token kind.  */
+#define YYMAXUTOK   444
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -1148,16 +1158,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,   197,     2,     2,     2,   196,   189,     2,
-     210,   211,   194,   193,   184,   192,   204,   195,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   186,   209,
-     190,   212,   191,   185,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   198,     2,     2,     2,   197,   190,     2,
+     211,   212,   195,   194,   185,   193,   205,   196,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   187,   210,
+     191,   213,   192,   186,     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,   205,     2,   206,   188,     2,     2,     2,     2,     2,
+       2,   206,     2,   207,   189,     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,   207,   187,   208,   198,     2,     2,     2,
+       2,     2,     2,   208,   188,   209,   199,     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,
@@ -1188,56 +1198,56 @@
      145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
      155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   199,
-     200,   201,   202,   203
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     200,   201,   202,   203,   204
 };
 
 #if YYDEBUG
-  /* YYRLINEYYN -- Source line where rule number YYN was defined.  */
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   315,   315,   329,   329,   331,   332,   332,   334,   335,
-     336,   339,   342,   343,   344,   347,   348,   349,   349,   351,
-     352,   353,   356,   357,   358,   359,   362,   363,   366,   367,
-     371,   372,   373,   374,   375,   376,   377,   380,   391,   392,
-     396,   397,   398,   399,   400,   401,   402,   403,   404,   407,
-     409,   417,   423,   427,   428,   430,   434,   438,   439,   442,
-     443,   446,   447,   451,   456,   463,   467,   468,   471,   472,
-     476,   479,   480,   481,   484,   485,   488,   489,   490,   491,
-     492,   493,   494,   495,   496,   497,   498,   499,   500,   501,
-     502,   503,   504,   505,   506,   507,   508,   509,   510,   511,
-     512,   513,   514,   515,   516,   517,   518,   519,   520,   521,
-     522,   523,   524,   525,   526,   527,   528,   529,   530,   531,
-     532,   533,   534,   535,   536,   537,   538,   539,   540,   541,
-     542,   543,   544,   545,   546,   547,   548,   549,   550,   551,
-     552,   553,   554,   555,   556,   557,   558,   559,   560,   561,
-     562,   563,   567,   568,   569,   570,   571,   572,   573,   574,
-     575,   576,   577,   578,   579,   580,   581,   582,   583,   584,
-     585,   586,   587,   588,   589,   590,   594,   595,   600,   601,
-     602,   603,   606,   607,   610,   614,   620,   621,   622,   625,
-     629,   641,   645,   650,   653,   654,   657,   658,   661,   662,
-     663,   664,   665,   666,   667,   668,   669,   670,   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,   696,   697,   698,   700,   702,   703,   706,
-     707,   710,   716,   722,   723,   726,   731,   738,   739,   742,
-     743,   747,   748,   751,   755,   761,   769,   773,   778,   779,
-     782,   783,   784,   787,   789,   792,   793,   794,   795,   796,
-     797,   798,   799,   800,   801,   802,   805,   806,   809,   810,
-     811,   812,   813,   814,   815,   816,   817,   820,   821,   829,
-     835,   839,   842,   843,   847,   850,   851,   854,   863,   864,
-     867,   868,   871,   877,   883,   884,   887,   888,   891,   898,
-     907,   912,   916,   917,   920,   921,   924,   929,   936,   937,
-     938,   942,   946,   949,   950,   953,   954,   958,   959,   963,
-     964,   965,   969,   971,   972,   976,   977,   978,   979,   984,
-     986,   987,   992,   994,   998,   999,  1004,  1005,  1006,  1007,
-    1011,  1019,  1021,  1022,  1027,  1029,  1033,  1034,  1041,  1042,
-    1043,  1044,  1045,  1049,  1056,  1057,  1060,  1061,  1064,  1071,
-    1072,  1077,  1078,  1082,  1083,  1084,  1085,  1086,  1090,  1091,
-    1092,  1095,  1098,  1099,  1100,  1101,  1102,  1103,  1104,  1105,
-    1106,  1107,  1110,  1117,  1119,  1125,  1126,  1127,  1131,  1132,
-    1135,  1136,  1139,  1144,  1152,  1153,  1156,  1157,  1160,  1161,
-    1162
+       0,   318,   318,   332,   332,   334,   335,   335,   337,   338,
+     339,   342,   345,   346,   347,   350,   351,   352,   352,   354,
+     355,   356,   359,   360,   361,   362,   365,   366,   369,   370,
+     374,   375,   376,   377,   378,   379,   380,   383,   394,   395,
+     399,   400,   401,   402,   403,   404,   405,   406,   407,   410,
+     412,   420,   426,   430,   431,   433,   437,   441,   442,   445,
+     446,   449,   450,   454,   459,   466,   470,   471,   474,   475,
+     479,   482,   483,   484,   487,   488,   491,   492,   493,   494,
+     495,   496,   497,   498,   499,   500,   501,   502,   503,   504,
+     505,   506,   507,   508,   509,   510,   511,   512,   513,   514,
+     515,   516,   517,   518,   519,   520,   521,   522,   523,   524,
+     525,   526,   527,   528,   529,   530,   531,   532,   533,   534,
+     535,   536,   537,   538,   539,   540,   541,   542,   543,   544,
+     545,   546,   547,   548,   549,   550,   551,   552,   553,   554,
+     555,   556,   557,   558,   559,   560,   561,   562,   563,   564,
+     565,   566,   570,   571,   572,   573,   574,   575,   576,   577,
+     578,   579,   580,   581,   582,   583,   584,   585,   586,   587,
+     588,   589,   590,   591,   592,   593,   597,   598,   603,   604,
+     605,   606,   609,   610,   613,   617,   623,   624,   625,   628,
+     632,   644,   648,   653,   656,   657,   660,   661,   664,   665,
+     666,   667,   668,   669,   670,   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,
+     696,   697,   698,   699,   700,   701,   703,   705,   706,   709,
+     710,   713,   719,   725,   726,   729,   734,   741,   742,   745,
+     746,   750,   751,   754,   758,   764,   772,   776,   781,   782,
+     785,   786,   787,   790,   792,   795,   796,   797,   798,   799,
+     800,   801,   802,   803,   804,   805,   808,   809,   812,   813,
+     814,   815,   816,   817,   818,   819,   820,   824,   825,   825,
+     829,   830,   830,   833,   834,   842,   848,   852,   853,   856,
+     857,   861,   864,   865,   868,   877,   878,   881,   882,   885,
+     891,   897,   898,   901,   902,   905,   912,   921,   926,   930,
+     931,   934,   935,   938,   943,   950,   951,   952,   956,   960,
+     963,   964,   967,   968,   972,   973,   977,   978,   979,   983,
+     985,   986,   990,   991,   992,   993,   998,  1000,  1001,  1006,
+    1008,  1012,  1013,  1018,  1019,  1020,  1021,  1025,  1033,  1035,
+    1036,  1041,  1043,  1047,  1048,  1055,  1056,  1057,  1058,  1059,
+    1063,  1070,  1071,  1074,  1075,  1078,  1085,  1086,  1091,  1092,
+    1096,  1097,  1098,  1099,  1100,  1104,  1105,  1106,  1109,  1112,
+    1113,  1114,  1115,  1116,  1117,  1118,  1119,  1120,  1121,  1124,
+    1131,  1133,  1139,  1140,  1141,  1145,  1146,  1149,  1150,  1153,
+    1158,  1166,  1167,  1170,  1171,  1174,  1175,  1176
 };
 #endif
 
@@ -1254,25 +1264,25 @@
 static const char *const yytname[] =
 {
   "\"end of file\"", "error", "\"invalid token\"", "aIDENTIFIER",
-  "aPRAGMA", "aKNOWNTYPE", "aNUM", "aHEXNUM", "aDOUBLE", "aSTRING",
-  "aWSTRING", "aSQSTRING", "aUUID", "aEOF", "aACF", "SHL", "SHR",
-  "MEMBERPTR", "EQUALITY", "INEQUALITY", "GREATEREQUAL", "LESSEQUAL",
-  "LOGICALOR", "LOGICALAND", "ELLIPSIS", "tAGGREGATABLE", "tALLOCATE",
-  "tANNOTATION", "tAPPOBJECT", "tASYNC", "tASYNCUUID", "tAUTOHANDLE",
-  "tBINDABLE", "tBOOLEAN", "tBROADCAST", "tBYTE", "tBYTECOUNT", "tCALLAS",
-  "tCALLBACK", "tCASE", "tCDECL", "tCHAR", "tCOCLASS", "tCODE",
-  "tCOMMSTATUS", "tCONST", "tCONTEXTHANDLE", "tCONTEXTHANDLENOSERIALIZE",
-  "tCONTEXTHANDLESERIALIZE", "tCONTROL", "tCPPQUOTE", "tDECODE",
-  "tDEFAULT", "tDEFAULTBIND", "tDEFAULTCOLLELEM", "tDEFAULTVALUE",
-  "tDEFAULTVTABLE", "tDISABLECONSISTENCYCHECK", "tDISPLAYBIND",
-  "tDISPINTERFACE", "tDLLNAME", "tDOUBLE", "tDUAL", "tENABLEALLOCATE",
-  "tENCODE", "tENDPOINT", "tENTRY", "tENUM", "tERRORSTATUST",
-  "tEXPLICITHANDLE", "tEXTERN", "tFALSE", "tFASTCALL", "tFAULTSTATUS",
-  "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",
+  "aPRAGMA", "aKNOWNTYPE", "aNAMESPACE", "aNUM", "aHEXNUM", "aDOUBLE",
+  "aSTRING", "aWSTRING", "aSQSTRING", "aUUID", "aEOF", "aACF", "SHL",
+  "SHR", "MEMBERPTR", "EQUALITY", "INEQUALITY", "GREATEREQUAL",
+  "LESSEQUAL", "LOGICALOR", "LOGICALAND", "ELLIPSIS", "tAGGREGATABLE",
+  "tALLOCATE", "tANNOTATION", "tAPPOBJECT", "tASYNC", "tASYNCUUID",
+  "tAUTOHANDLE", "tBINDABLE", "tBOOLEAN", "tBROADCAST", "tBYTE",
+  "tBYTECOUNT", "tCALLAS", "tCALLBACK", "tCASE", "tCDECL", "tCHAR",
+  "tCOCLASS", "tCODE", "tCOMMSTATUS", "tCONST", "tCONTEXTHANDLE",
+  "tCONTEXTHANDLENOSERIALIZE", "tCONTEXTHANDLESERIALIZE", "tCONTROL",
+  "tCPPQUOTE", "tDECODE", "tDEFAULT", "tDEFAULTBIND", "tDEFAULTCOLLELEM",
+  "tDEFAULTVALUE", "tDEFAULTVTABLE", "tDISABLECONSISTENCYCHECK",
+  "tDISPLAYBIND", "tDISPINTERFACE", "tDLLNAME", "tDOUBLE", "tDUAL",
+  "tENABLEALLOCATE", "tENCODE", "tENDPOINT", "tENTRY", "tENUM",
+  "tERRORSTATUST", "tEXPLICITHANDLE", "tEXTERN", "tFALSE", "tFASTCALL",
+  "tFAULTSTATUS", "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", "tMAYBE", "tMESSAGE", "tMETHODS", "tMODULE",
   "tNAMESPACE", "tNOCODE", "tNONBROWSABLE", "tNONCREATABLE",
@@ -1302,12 +1312,13 @@
   "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", "t_ident", "ident", "base_type", "m_int",
-  "int_std", "coclass", "coclasshdr", "coclassdef", "namespacedef",
-  "coclass_ints", "coclass_int", "dispinterface", "dispinterfacehdr",
-  "dispint_props", "dispint_meths", "dispinterfacedef", "inherit",
-  "interface", "interfacehdr", "interfacedef", "interfacedec", "module",
-  "modulehdr", "moduledef", "storage_cls_spec", "function_specifier",
-  "type_qualifier", "m_type_qual_list", "decl_spec", "m_decl_spec_no_type",
+  "int_std", "qualified_seq", "$@3", "qualified_type", "$@4", "coclass",
+  "coclasshdr", "coclassdef", "namespacedef", "coclass_ints",
+  "coclass_int", "dispinterface", "dispinterfacehdr", "dispint_props",
+  "dispint_meths", "dispinterfacedef", "inherit", "interface",
+  "interfacehdr", "interfacedef", "interfacedec", "module", "modulehdr",
+  "moduledef", "storage_cls_spec", "function_specifier", "type_qualifier",
+  "m_type_qual_list", "decl_spec", "m_decl_spec_no_type",
   "decl_spec_no_type", "declarator", "direct_declarator",
   "abstract_declarator", "abstract_declarator_no_direct",
   "m_abstract_declarator", "abstract_direct_declarator", "any_declarator",
@@ -1349,961 +1360,996 @@
      405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
      415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
      425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
-     435,   436,   437,   438,    44,    63,    58,   124,    94,    38,
-      60,    62,    45,    43,    42,    47,    37,    33,   126,   439,
-     440,   441,   442,   443,    46,    91,    93,   123,   125,    59,
-      40,    41,    61
+     435,   436,   437,   438,   439,    44,    63,    58,   124,    94,
+      38,    60,    62,    45,    43,    42,    47,    37,    33,   126,
+     440,   441,   442,   443,   444,    46,    91,    93,   123,   125,
+      59,    40,    41,    61
 };
 #endif
 
-#define YYPACT_NINF (-560)
+#define YYPACT_NINF (-561)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF (-405)
+#define YYTABLE_NINF (-412)
 
 #define yytable_value_is_error(Yyn) \
   0
 
-  /* YYPACTSTATE-NUM -- Index in YYTABLE of the portion describing
+  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    -560,    94,  1606,  -560,  -560,  -560,   -57,  -560,  -560,  -560,
-     147,  -560,   -89,   165,  -560,   169,  -560,  -560,  -560,  -560,
-      35,   149,  -560,  -560,  -560,  -560,  -560,   172,    35,   164,
-     -34,  -560,   -29,    35,   333,  -560,  -560,   192,   197,   333,
-    -560,  -560,  2869,  -560,  -560,  -560,   -27,  -560,  -560,  -560,
-    -560,  -560,    21,  2567,   -13,   -10,  -560,  -560,     9,   -36,
-    -560,     2,    12,    38,    23,    46,    41,  -560,  -560,    57,
-    -560,   128,   128,   128,   175,  2716,    76,   128,    81,    88,
-      61,  -560,   -57,   219,  -560,  -560,   315,  -560,  -560,    15,
-    -560,   121,  -560,  -560,   123,  -560,  -560,  -560,  -560,   331,
-    2716,  -560,  -560,    58,   129,   -94,  -112,  -560,  -560,   130,
-    -560,  -560,   131,  -560,  -560,  -560,   132,   134,  -560,  -560,
-    -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,   138,  -560,
-    -560,  -560,   140,  -560,  -560,  -560,   141,   146,  -560,  -560,
-    -560,  -560,   150,   151,   153,   157,   158,  -560,   160,  -560,
-    -560,   161,  -560,   163,  -560,  -560,   166,   167,  -560,  -560,
-    -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,
-    -560,   168,  -560,  -560,  -560,   170,   171,  -560,  -560,  -560,
-    -560,  -560,  -560,   174,  -560,  -560,   185,  -560,  -560,  -560,
-     187,  -560,  -560,  -560,   188,   189,   190,   191,  -560,  -560,
-    -560,   195,   196,  -560,  -560,   206,   209,   211,  -132,  -560,
-    -560,  -560,  1736,   851,   133,   267,   270,   273,   283,   286,
-     220,   148,  -560,  -560,  -560,  -560,   175,   173,   216,  -560,
-    -560,  -560,  -560,  -560,   -42,  -560,  -560,  -560,   290,   222,
-    -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,
-    -560,  -560,   175,   175,  -560,   127,  -101,  -560,  -560,  -560,
-     128,  -560,  -560,  -560,  -560,  -560,  -560,  -119,  -560,  -560,
-     374,   215,   291,  -560,   249,   225,  -560,   227,  -560,   429,
-      84,   291,   710,   710,   430,   432,   710,   710,   435,   458,
-     710,   461,   710,   710,  2097,   710,   710,   463,   -68,   464,
-     710,  2716,   710,   710,  2716,   -38,  2716,  2716,    84,   324,
-     466,  2716,  2869,   271,  -560,   268,  -560,  -560,  -560,   272,
-    -560,   278,  -560,  -560,  -560,    23,  2612,  -560,   279,  -560,
-    -560,  -560,  -560,   279,   -91,  -560,  -560,  -122,  -560,   293,
-     -65,   280,   284,  -560,  -560,  1193,    52,   266,  -560,   710,
-     542,  2097,  -560,  -560,    61,  -560,   285,  -560,   282,   303,
-    -560,   281,   488,  -560,   -49,   133,   -39,   294,  -560,  -560,
-     295,   296,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,
-    -560,   305,  -560,   710,   710,   710,   710,   710,   710,   596,
-    2299,  -135,  -560,  2299,   306,   307,  -560,  -111,   308,   309,
-     314,   316,   317,   323,   326,   371,   327,  2612,    77,   328,
-    -106,  -560,  2299,   329,   330,   332,   311,   335,  -100,  1397,
-     343,  -560,  -560,  -560,  -560,  -560,   344,   346,   359,   360,
-     292,  -560,   361,   362,   367,  -560,  2869,   492,  -560,  -560,
-    -560,   175,    23,   -11,  -560,  1089,  -560,   340,  2612,   370,
-    1476,   334,   413,  1297,    23,  -560,  2612,  -560,  -560,  -560,
-    -560,   611,  -560,  2190,   377,   402,  -560,  -560,  -560,   380,
-    -560,   291,   710,  -560,    18,  -560,  2612,  -560,   378,  -560,
-     384,  -560,   389,  -560,  -560,  -560,  2612,    36,    36,    36,
-      36,    36,    36,  2102,   496,   710,   710,   597,   710,   710,
-     710,   710,   710,   710,   710,   710,   710,   710,   710,   710,
-     710,   710,   710,   710,   710,   605,   710,   710,  -560,  -560,
-    -560,   600,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,
-    -560,  -560,    77,  -560,  1833,  -560,    77,  -560,  -560,  -560,
-     -87,  -560,   710,  -560,  -560,  -560,  -560,   710,  -560,  -560,
-    -560,  -560,  -560,  -560,  -560,  -560,   604,  -560,  -560,  -560,
-    -560,   400,  -560,  -560,   428,  -560,  -560,  -560,  -560,   175,
-     116,  -560,  -560,  2612,   407,  -560,  -560,  -560,    23,  -560,
-    -560,  -560,  -560,  2009,   419,   417,   380,  -560,  -560,  -560,
-    -560,    77,   418,   291,  -560,  -560,   496,  -560,  -560,  1921,
-    -560,   496,  -560,   415,   -74,   318,   318,  -560,   575,   575,
-     482,   482,  2318,  2337,  2260,  2372,  2394,   218,   482,   482,
-      54,    54,    36,    36,    36,  -560,  2212,  -560,  -560,  -560,
-      74,  -560,   421,    77,   422,  -560,  2097,  -560,  -560,   424,
-    -560,    23,   970,   175,  -560,  -560,  1401,  -560,  -560,  -560,
-     623,  -560,  -560,   444,  -560,  -103,  -560,   431,  -560,   425,
-     375,  -560,   434,    77,   437,  -560,   710,  2097,  -560,   710,
-    -560,  -560,    74,  -560,  -560,  -560,   440,  -560,  -560,  -560,
-    -560,    23,   433,   710,  -560,    77,  -560,  -560,  -560,  -560,
-      74,  -560,  -560,  -560,    36,   441,  2299,  -560,  -560,  -560,
-    -560,  -560,  -560,    -1,  -560,  -560,   710,   453,  -560,  -560,
-     468,   -58,   -58,  -560,  -560,   447,  -560,  -560
+    -561,    58,  1724,  -561,  -561,  -561,  -134,   -71,  -561,  -561,
+    -561,   151,  -561,  -130,   201,  -561,   217,  -561,  -561,  -561,
+    -561,     2,   122,  -561,  -561,  -561,  -561,  -561,   223,     2,
+     120,   -38,  -561,   -34,     2,   437,  -561,  -561,   244,   259,
+     437,  -561,  -561,  3026,  -561,  -561,  -561,   -46,  -561,  -561,
+    -561,  -561,  -561,    27,  2707,   -26,   -25,  -561,  -561,  -561,
+     -21,   -15,  -561,    -8,    -5,     3,    51,    57,    71,  -561,
+    -561,    60,  -561,    28,    28,    28,    48,  2873,    62,    28,
+      63,    66,  -561,    50,  -561,   -71,   110,  -561,  -561,   228,
+    -561,  -561,    72,  -561,    69,  -561,  -561,    75,  -561,  -561,
+    -561,  -561,  -561,   241,  2873,  -561,  -561,    78,    82,  -112,
+    -113,  -561,  -561,    84,  -561,  -561,    87,  -561,  -561,  -561,
+      98,   106,  -561,  -561,  -561,  -561,  -561,  -561,  -561,  -561,
+    -561,  -561,   107,  -561,  -561,  -561,   123,  -561,  -561,  -561,
+     125,   135,  -561,  -561,  -561,  -561,   136,   141,   142,   144,
+     147,  -561,   154,  -561,  -561,   155,  -561,   157,  -561,  -561,
+     160,   167,  -561,  -561,  -561,  -561,  -561,  -561,  -561,  -561,
+    -561,  -561,  -561,  -561,  -561,   169,  -561,  -561,  -561,   170,
+     171,  -561,  -561,  -561,  -561,  -561,  -561,   172,  -561,  -561,
+     173,  -561,  -561,  -561,   177,  -561,  -561,  -561,   178,   179,
+     190,   191,  -561,  -561,  -561,   193,   194,  -561,  -561,   195,
+     198,   202,   -68,  -561,  -561,  -561,  1854,   903,   153,   291,
+     302,   305,   309,   310,   161,   121,  -561,  -561,  -561,  -561,
+      48,   181,   197,  -561,  -561,  -561,  -561,  -561,   -42,  -561,
+    -561,  -561,   196,   204,  -561,  -561,  -561,  -561,  -561,  -561,
+    -561,  -561,  -561,  -561,  -561,  -561,    48,    48,  -561,   203,
+     -81,  -561,  -561,  -561,    28,  -561,  -561,  -561,   322,  -561,
+    -561,  -561,   -32,  -561,  -561,   409,   205,   323,  -561,   231,
+     207,  -561,   209,  -561,   405,   128,   323,   737,   737,   412,
+     413,   737,   737,   414,   415,   737,   416,   737,   737,  2237,
+     737,   737,   417,   -75,   418,   737,  2873,   737,   737,  2873,
+     158,  2873,  2873,   128,   104,   419,  2873,  3026,   224,  -561,
+     220,  -561,  -561,  -561,   226,  -561,   225,  -561,  -561,  -561,
+      51,  2752,  -561,   229,  -561,  -561,  -561,  -561,   229,  -102,
+    -561,  -561,   -51,  -561,   247,   -69,   236,   239,  -561,  -561,
+    1260,    24,   237,  -561,   737,    76,  2237,  -561,  -561,   243,
+    -561,  -561,    50,  -561,   242,  -561,   246,   267,  -561,   245,
+     469,  -561,     4,   153,    30,   266,  -561,  -561,   268,   270,
+    -561,  -561,  -561,  -561,  -561,  -561,  -561,  -561,  -561,   272,
+    -561,   737,   737,   737,   737,   737,   737,   727,  2439,  -107,
+    -561,  2439,   273,   274,  -561,  -105,   275,   276,   277,   279,
+     281,   283,   284,   376,   286,  2752,   124,   287,   -94,  -561,
+    2439,   288,   289,   290,   299,   293,   -93,  1494,   294,  -561,
+    -561,  -561,  -561,  -561,   297,   298,   303,   306,   312,  -561,
+     307,   308,   311,  -561,  3026,   493,  -561,  -561,  -561,    48,
+      51,    -1,  -561,  1141,  -561,   334,  2752,   315,  1573,   317,
+     435,  1379,    51,  -561,  2752,  -561,  -561,  -561,  -561,   623,
+    -561,  2330,   316,   345,  -561,  -561,  -561,  -561,   366,  -561,
+     323,   737,  -561,    25,  -561,  2752,  -561,   320,  -561,   324,
+    -561,   330,  -561,  -561,  -561,  2752,    36,    36,    36,    36,
+      36,    36,  2242,   756,   737,   737,   539,   737,   737,   737,
+     737,   737,   737,   737,   737,   737,   737,   737,   737,   737,
+     737,   737,   737,   737,   540,   737,   737,  -561,  -561,  -561,
+     536,  -561,  -561,  -561,  -561,  -561,  -561,  -561,  -561,  -561,
+    -561,   124,  -561,  1973,  -561,   124,  -561,  -561,  -561,   -40,
+    -561,   737,  -561,  -561,  -561,  -561,   737,  -561,  -561,  -561,
+    -561,  -561,  -561,  -561,  -561,   541,  -561,  -561,  -561,  -561,
+     338,  -561,  -561,   367,  -561,  -561,  -561,  -561,    48,   133,
+    -561,  -561,  2752,   341,  -561,  -561,  -561,    51,  -561,  -561,
+    -561,  -561,  2149,   322,   347,   346,   366,  -561,  -561,  -561,
+    -561,   124,   344,   323,  -561,  -561,   756,  -561,  -561,  2061,
+    -561,   756,  -561,   351,   -37,   180,   180,  -561,   422,   422,
+     127,   127,  2458,  2477,  2400,  2512,  2534,   667,   127,   127,
+      96,    96,    36,    36,    36,  -561,  2352,  -561,  -561,  -561,
+     105,  -561,   362,   124,   363,  -561,  2237,  -561,  -561,   364,
+    -561,    51,  1022,    48,  -561,  -561,  1498,  -561,  -561,  -561,
+    -561,   552,  -561,  -561,   371,  -561,  -116,  -561,   369,  -561,
+     368,   625,  -561,   372,   124,   374,  -561,   737,  2237,  -561,
+     737,  -561,  -561,   105,  -561,  -561,  -561,   375,  -561,  -561,
+    -561,  -561,    51,   349,   737,  -561,   124,  -561,  -561,  -561,
+    -561,   105,  -561,  -561,  -561,    36,   380,  2439,  -561,  -561,
+    -561,  -561,  -561,  -561,    23,  -561,  -561,   737,   391,  -561,
+    -561,   392,   -97,   -97,  -561,  -561,   384,  -561,  -561
 };
 
-  /* YYDEFACTSTATE-NUM -- Default reduction number in state STATE-NUM.
+  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
      Performed when YYTABLE does not specify something else to do.  Zero
      means the default is an error.  */
 static const yytype_int16 yydefact[] =
 {
-       5,     0,     3,     1,    35,   383,   398,   273,   265,   284,
-       0,   322,     0,     0,   272,   260,   274,   318,   271,   275,
-     276,     0,   321,   278,   285,   286,   283,     0,   276,     0,
-       0,   320,     0,   276,     0,   280,   319,   260,   260,   270,
-     382,   266,    76,     2,    14,    36,     0,    30,    15,    33,
-      15,    13,     0,    69,   385,     0,   384,   267,     0,     0,
-      11,     0,     0,     0,    28,     0,   304,     9,     8,     0,
-      12,   327,   327,   327,     0,     0,   387,   327,     0,   389,
-       0,     4,   398,     0,   287,   288,     0,   295,   296,   386,
-     262,     0,   277,   282,     0,   306,   307,   281,   291,     0,
-       0,   279,   268,   388,     0,   390,     0,   269,    77,     0,
-      79,    80,     0,    81,    82,    83,     0,     0,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,     0,    97,
-      98,    99,     0,   101,   102,   103,     0,     0,   106,   107,
-     108,   109,     0,     0,     0,     0,     0,   115,     0,   117,
-     118,     0,   120,     0,   122,   123,   126,     0,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,     0,   141,   142,   143,     0,     0,   146,   147,   148,
-     149,   380,   150,     0,   152,   378,     0,   154,   155,   156,
-       0,   158,   159,   160,     0,     0,     0,     0,   165,   379,
-     166,     0,     0,   170,   171,     0,     0,     0,     0,    71,
-     175,    31,    68,    68,    68,   260,     0,     0,   260,   260,
-       0,   385,   289,   297,   308,   316,     0,   387,   389,    32,
-      10,   292,     6,   313,     0,    29,   311,   312,     0,     0,
-      26,   331,   328,   330,   329,   263,   264,   178,   179,   180,
-     181,   323,     0,     0,   335,   371,   334,   257,   385,   387,
-     327,   389,   325,    34,   409,   408,   410,     0,   406,   399,
-       0,     0,   186,    50,     0,     0,   243,     0,   249,     0,
+       5,     0,     3,     1,    35,   290,     0,   405,   273,   265,
+     284,     0,   329,     0,     0,   272,   260,   274,   325,   271,
+     275,   276,     0,   328,   278,   285,   286,   283,     0,   276,
+       0,     0,   327,     0,   276,     0,   280,   326,   260,   260,
+     270,   389,   266,    76,     2,    14,    36,     0,    30,    15,
+      33,    15,    13,     0,    69,   392,     0,   391,   267,   390,
+       0,     0,    11,     0,     0,     0,    28,     0,   311,     9,
+       8,     0,    12,   334,   334,   334,     0,     0,   394,   334,
+       0,   396,   291,     0,     4,   405,     0,   293,   294,     0,
+     302,   303,   393,   262,     0,   277,   282,     0,   313,   314,
+     281,   297,   298,     0,     0,   279,   268,   395,     0,   397,
+       0,   269,    77,     0,    79,    80,     0,    81,    82,    83,
+       0,     0,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,     0,    97,    98,    99,     0,   101,   102,   103,
+       0,     0,   106,   107,   108,   109,     0,     0,     0,     0,
+       0,   115,     0,   117,   118,     0,   120,     0,   122,   123,
+     126,     0,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,     0,   141,   142,   143,     0,
+       0,   146,   147,   148,   149,   387,   150,     0,   152,   385,
+       0,   154,   155,   156,     0,   158,   159,   160,     0,     0,
+       0,     0,   165,   386,   166,     0,     0,   170,   171,     0,
+       0,     0,     0,    71,   175,    31,    68,    68,    68,   260,
+       0,     0,   260,   260,     0,   392,   295,   304,   315,   323,
+       0,   394,   396,    32,    10,   299,     6,   320,     0,    29,
+     318,   319,     0,     0,    26,   338,   335,   337,   336,   263,
+     264,   178,   179,   180,   181,   330,     0,     0,   342,   378,
+     341,   257,   392,   394,   334,   396,   332,    34,     0,   416,
+     415,   417,     0,   413,   406,     0,     0,   186,    50,     0,
+       0,   243,     0,   249,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   196,     0,     0,     0,
-       0,     0,   196,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    76,    70,    51,     0,    23,    24,    25,     0,
-      21,     0,    19,    16,    22,    28,     0,    69,   386,    53,
-      54,   314,   315,   388,   390,    55,   256,    68,     5,     0,
-      68,     0,     0,   305,    26,    68,     0,     0,   333,     0,
-       0,    57,   337,   326,     0,   405,     0,    49,     0,   188,
-     189,   192,     0,   391,    68,    68,    68,     0,   177,   176,
-       0,     0,   207,   198,   199,   200,   204,   205,   206,   201,
-     202,     0,   203,     0,     0,     0,     0,     0,     0,     0,
-     241,     0,   239,   242,     0,     0,    74,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   356,     0,
-       0,   194,   197,     0,     0,     0,     0,     0,     0,     0,
-       0,   373,   374,   375,   376,   377,     0,     0,     0,     0,
-     395,   397,     0,     0,     0,    72,    76,     0,    20,    17,
-      56,     0,    28,     0,   293,    68,   298,     0,     0,     0,
-       0,     0,     0,    68,    28,    27,    69,   324,   332,   336,
-     372,     0,    67,     0,     0,    61,    58,    59,   407,   400,
-     193,   187,     0,    38,     0,   381,     0,   244,     0,   393,
-      69,   250,     0,    78,   169,    84,     0,   231,   230,   229,
-     232,   227,   228,     0,   344,     0,     0,     0,     0,     0,
+       0,   196,     0,     0,     0,     0,     0,   196,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    76,    70,    51,
+       0,    23,    24,    25,     0,    21,     0,    19,    16,    22,
+      28,     0,    69,   393,    53,    54,   321,   322,   395,   397,
+      55,   256,    68,     5,     0,    68,     0,     0,   312,    26,
+      68,     0,     0,   340,     0,     0,    57,   344,   333,     0,
+     287,   292,     0,   412,     0,    49,     0,   188,   189,   192,
+       0,   398,    68,    68,    68,     0,   177,   176,     0,     0,
+     207,   198,   199,   200,   204,   205,   206,   201,   202,     0,
+     203,     0,     0,     0,     0,     0,     0,     0,   241,     0,
+     239,   242,     0,     0,    74,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   363,     0,     0,   194,
+     197,     0,     0,     0,     0,     0,     0,     0,     0,   380,
+     381,   382,   383,   384,     0,     0,     0,     0,   402,   404,
+       0,     0,     0,    72,    76,     0,    20,    17,    56,     0,
+      28,     0,   300,    68,   305,     0,     0,     0,     0,     0,
+       0,    68,    28,    27,    69,   331,   339,   343,   379,     0,
+      67,     0,     0,    61,    58,    59,   288,   414,   407,   193,
+     187,     0,    38,     0,   388,     0,   244,     0,   400,    69,
+     250,     0,    78,   169,    84,     0,   231,   230,   229,   232,
+     227,   228,     0,   351,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    85,    96,
-     100,     0,   104,   105,   110,   111,   112,   113,   114,   116,
-     119,   121,   356,   323,    57,   361,   356,   358,   357,    64,
-     353,   125,   196,   124,   140,   144,   145,     0,   153,   157,
-     161,   162,   164,   163,   167,   168,     0,   172,   173,   174,
-      73,     0,    15,   364,   392,   290,   294,     7,   300,     0,
-     387,   299,   302,     0,     0,   255,   303,    26,    28,   317,
-      66,    65,   338,     0,   404,     0,   400,   190,   191,    39,
-      37,     0,   389,   258,   248,   247,   344,   238,   323,    57,
-     348,   344,   345,     0,   341,   220,   221,   233,   214,   215,
+       0,     0,     0,     0,     0,     0,     0,    85,    96,   100,
+       0,   104,   105,   110,   111,   112,   113,   114,   116,   119,
+     121,   363,   330,    57,   368,   363,   365,   364,    64,   360,
+     125,   196,   124,   140,   144,   145,     0,   153,   157,   161,
+     162,   164,   163,   167,   168,     0,   172,   173,   174,    73,
+       0,    15,   371,   399,   296,   301,     7,   307,     0,   394,
+     306,   309,     0,     0,   255,   310,    26,    28,   324,    66,
+      65,   345,     0,     0,   411,     0,   407,   190,   191,    39,
+      37,     0,   396,   258,   248,   247,   351,   238,   330,    57,
+     355,   351,   352,     0,   348,   220,   221,   233,   214,   215,
      218,   219,   209,   210,     0,   211,   212,   213,   217,   216,
      223,   222,   225,   226,   224,   234,     0,   240,    75,    63,
-     356,   323,     0,   356,     0,   352,    57,   360,   195,     0,
-     396,    28,    68,     0,   253,   301,    68,   309,    62,    60,
-       0,   403,   401,   366,   369,     0,   246,     0,   259,     0,
-     344,   323,     0,   356,     0,   340,     0,    57,   347,     0,
-     237,   351,   356,   362,   355,   359,     0,   151,    52,    18,
-     365,    28,     0,     0,   368,     0,   245,   182,   236,   339,
-     356,   349,   343,   346,   235,     0,   208,   354,   363,   310,
-     402,   367,   370,     0,   342,   350,     0,     0,   394,   183,
-       0,    68,    68,   252,   185,     0,   184,   251
+     363,   330,     0,   363,     0,   359,    57,   367,   195,     0,
+     403,    28,    68,     0,   253,   308,    68,   316,    62,    60,
+     289,     0,   410,   408,   373,   376,     0,   246,     0,   259,
+       0,   351,   330,     0,   363,     0,   347,     0,    57,   354,
+       0,   237,   358,   363,   369,   362,   366,     0,   151,    52,
+      18,   372,    28,     0,     0,   375,     0,   245,   182,   236,
+     346,   363,   356,   350,   353,   235,     0,   208,   361,   370,
+     317,   409,   374,   377,     0,   349,   357,     0,     0,   401,
+     183,     0,    68,    68,   252,   185,     0,   184,   251
 };
 
-  /* YYPGOTONTERM-NUM.  */
+  /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -560,  -560,  -560,   320,  -560,   -46,  -560,  -317,  -315,     0,
-    -560,  -560,  -560,  -560,  -560,   208,  -560,  -560,  -560,    10,
-    -514,  -560,  -560,  -261,  -242,  -203,    -2,  -560,  -560,  -272,
-     354,   -66,  -560,  -560,  -560,  -560,   198,    13,   366,   137,
-    -195,  -560,  -264,  -280,  -560,  -560,  -560,  -560,   -41,  -237,
-    -560,   233,  -560,    25,   -69,  -560,    42,    99,     5,  -560,
-      11,    17,  -560,  -560,   619,  -560,  -560,  -560,  -560,  -560,
-     -18,  -560,    19,    16,  -560,  -560,    20,  -560,  -560,  -307,
-    -496,   -52,   -43,   -30,  -236,  -560,  -560,  -560,  -540,  -560,
-    -559,  -560,    51,  -560,  -560,  -560,     3,  -560,   459,  -560,
-     391,     1,   -50,  -560,     7,  -560,   615,   112,  -560,  -560,
-     115,  -560,   348
+    -561,  -561,  -561,   252,  -561,   -47,  -561,  -323,  -322,     0,
+    -561,  -561,  -561,  -561,  -561,   145,  -561,  -561,  -561,    11,
+    -487,  -561,  -561,  -288,  -250,  -211,    -2,  -561,  -561,  -287,
+     295,   -62,  -561,  -561,  -561,  -561,   116,    13,   304,    53,
+     206,  -561,  -272,  -286,  -561,  -561,  -561,  -561,  -117,  -270,
+    -561,   152,  -561,    34,   -70,  -561,   138,   148,    29,  -561,
+     370,  -561,    10,  -561,    17,    19,  -561,  -561,   566,  -561,
+    -561,  -561,  -561,  -561,   -17,  -561,    20,    16,  -561,  -561,
+      22,  -561,  -561,  -334,  -492,   -53,   -30,   -39,  -218,  -561,
+    -561,  -561,  -529,  -561,  -560,  -561,  -493,  -561,  -561,  -561,
+     -73,  -561,   394,  -561,   318,     1,   -61,  -561,     7,  -561,
+     544,    40,  -561,  -561,    43,  -561,   278
 };
 
-  /* YYDEFGOTONTERM-NUM.  */
+  /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,    43,     2,   338,   212,   562,   345,   236,   316,
-      45,   474,    46,    47,    48,    49,   317,   220,    50,   318,
-     464,   465,   466,   467,   535,    52,   327,   208,   397,   209,
-     370,   536,   703,   709,   358,   359,   360,   258,   410,   411,
-     390,   391,   392,   394,   364,   477,   481,   366,   714,   715,
-     574,    55,   657,    91,   537,    56,    93,    57,   319,    59,
-     320,   321,   337,   444,    62,    63,   340,   450,    64,   239,
-      65,    66,   322,   323,   225,    69,   324,    71,    72,    73,
-     346,    74,   241,    75,   255,   256,   602,   664,   603,   604,
-     538,   634,   539,   540,   564,   684,   654,   655,   257,   426,
-     210,   259,    77,    78,   261,   432,    81,   585,   586,    82,
-      83,   267,   268
+      -1,     1,    44,     2,   343,   216,   571,   350,   240,   321,
+      46,   483,    47,    48,    49,    50,   322,   224,    51,   323,
+     472,   473,   474,   475,   544,    53,   332,   212,   405,   213,
+     378,   545,   714,   720,   366,   367,   368,   262,   418,   419,
+     398,   399,   400,   402,   372,   486,   490,   374,   725,   726,
+     583,    56,   668,    94,   546,    57,    96,    58,   361,   593,
+      59,   268,   324,    61,   325,   326,   342,   452,    64,    65,
+     345,   458,    66,   243,    67,    68,   327,   328,   229,    71,
+     329,    73,    74,    75,   351,    76,   245,    77,   259,   260,
+     612,   675,   613,   614,   547,   644,   548,   549,   573,   695,
+     665,   666,   261,   434,   214,   263,    79,    80,   265,   440,
+      84,   595,   596,    85,    86,   272,   273
 };
 
-  /* YYTABLEYYPACT[STATE-NUM] -- What to do in state STATE-NUM.  If
+  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
      positive, shift that token.  If negative, reduce the rule whose
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      53,   226,    44,    76,   213,   254,   398,    58,   253,    79,
-     440,   326,    51,    60,   352,    54,   347,   348,    68,    61,
-     632,    67,    70,   399,   589,   260,   402,   453,   404,   243,
-     244,   409,   653,   406,   262,   224,   416,   630,   706,   457,
-     435,   242,   242,   242,  -404,   447,   277,   242,    13,   517,
-     275,   707,   312,   497,   227,   245,   659,   246,   222,    27,
-     228,   665,   104,   106,  -261,   354,   221,  -261,   181,   460,
-      97,   497,   185,   521,   313,   101,   518,   245,   542,   246,
-     245,   685,   246,    42,   542,   662,   442,   355,   393,   339,
-      27,   393,   247,   368,     3,   278,   369,    11,   405,   199,
-     522,   412,   660,   449,   350,   543,   686,   412,   419,   351,
-     458,   549,   264,  -261,   247,   -45,  -261,   247,   350,    11,
-     689,    86,   676,   636,   248,   265,   653,   565,   478,   482,
-     266,   350,    92,   102,   443,   672,   667,   448,   107,   579,
-      42,   421,   422,   423,   424,   425,   248,    42,    80,   248,
-      84,   713,    85,   695,   393,   463,    42,   254,    94,   475,
-     253,   476,   448,   448,   560,   690,    42,    98,    87,   479,
-      88,   231,    89,    11,    90,    95,    99,    96,   245,   249,
-     246,   100,   211,   254,   254,   214,   253,   253,   487,   488,
-     489,   490,   491,   492,   493,   103,   -40,    90,    17,   229,
-     105,   249,    90,   361,   249,   563,   250,   708,   588,   232,
-      53,    53,   371,    76,    76,   247,   341,   353,   230,    79,
-      79,   233,  -261,    22,   -41,    54,    54,   238,   250,   590,
-     242,   250,   235,   495,   496,   497,   498,   499,   500,   501,
-     515,   516,   408,   104,   106,   234,   251,   248,   512,   513,
-     514,   417,   600,   627,   420,   237,   427,   428,   515,   516,
-     646,   434,   252,   647,   240,  -261,   490,   -43,   533,    31,
-     328,   533,    90,   329,   441,   330,   331,   254,   332,   350,
-     253,    36,   350,   639,   534,   -42,   333,   534,    90,   334,
-     263,    90,   407,   342,   245,   343,   246,   -44,   637,   408,
-     605,   606,   249,   608,   609,   610,   611,   612,   613,   614,
-     615,   616,   617,   618,   619,   620,   621,   622,   623,   624,
-     270,   626,   649,   457,   271,  -254,   678,  -254,   272,   250,
-     430,   431,   273,   644,   274,   497,   276,   494,    42,   349,
-     279,   280,   281,   456,   282,   455,    76,   412,   283,   407,
-     284,   285,    79,   457,   600,   532,   286,   -46,    54,   600,
-     287,   288,   668,   289,   480,   457,   699,   290,   291,   251,
-     292,   293,   254,   294,     9,   253,   295,   296,   297,   356,
-     298,   299,   -47,   457,   300,   252,   495,   496,   497,   498,
-     499,   500,   501,   502,   503,   301,   569,   302,   303,   304,
-     305,   306,   361,   701,   226,   307,   308,   680,   508,   509,
-     510,   511,   512,   513,   514,   247,   309,    20,   600,   310,
-      11,   311,   515,   516,   591,   -48,   357,   335,   601,   344,
-      23,    24,    25,    26,   596,   362,   363,   365,   367,   395,
-      28,   396,   710,    53,   400,    44,    76,   248,   573,   570,
-      58,   456,    79,   455,    76,    51,    60,   227,    54,   566,
-      79,    68,    61,   228,    67,    70,    54,   401,   633,   221,
-     403,   694,   413,   415,   696,   433,   436,   459,   437,   446,
-      33,   438,   408,   592,    35,   439,  -261,   471,   393,   451,
-     470,   452,   469,   472,   473,   547,   556,   495,   496,   497,
-     254,   561,   249,   253,    21,   483,   484,   485,   448,   448,
-     510,   511,   512,   513,   514,   486,   642,   519,   520,   523,
-     524,   226,   515,   516,   658,   525,   568,   526,   527,   250,
-     601,   408,   407,   663,   528,   601,   247,   529,   531,   541,
-     544,   545,   576,   546,   584,   372,   548,   408,   373,   374,
-     375,   376,   377,   378,   551,   552,   504,   553,   505,   506,
-     507,   508,   509,   510,   511,   512,   513,   514,   248,   598,
-     554,   555,   557,   558,   254,   515,   516,   253,   559,   571,
-     350,   407,   530,   629,   408,   599,   583,   635,   582,   593,
-     495,   496,   497,   594,   601,   500,   501,   407,   595,   372,
-     607,     5,   373,   374,   375,   376,   377,   378,   625,   628,
-     640,   641,   643,   379,   372,   408,   645,   373,   374,   375,
-     376,   377,   378,   249,    80,   651,   666,   656,   682,     7,
-     683,     8,   673,   675,   407,   677,   688,     9,   687,   711,
-      53,    11,   700,    76,   456,   691,   455,    76,   693,    79,
-     250,   698,   705,    79,   712,    54,   717,    14,   445,    54,
-     577,   380,   429,   215,    16,   407,    17,   379,   418,   587,
-      18,   716,   223,    19,   510,   511,   512,   513,   514,   638,
-      20,   671,   379,   575,   674,   336,   515,   516,   702,   414,
-     598,    22,   381,    23,    24,    25,    26,   269,   652,   650,
-       0,   350,   468,    28,     0,   382,   599,     0,     0,     0,
-       0,     0,     0,   372,   692,   380,   373,   374,   375,   376,
-     377,   378,     0,   697,     0,     0,     0,     0,     0,     0,
-     380,   383,     0,     0,   384,   385,   461,    31,     0,   387,
-     388,   704,    32,    33,    34,     0,   381,    35,   462,    36,
-       0,     0,   389,   218,     0,     0,     0,     0,     0,   382,
-       0,   381,   219,     0,    39,   508,   509,   510,   511,   512,
-     513,   514,    40,    41,   382,     0,     0,     0,     0,   515,
-     516,   379,     0,     0,     0,   383,     0,     0,   384,   385,
-     386,     0,     0,   387,   388,     0,     0,     0,     0,     0,
-     383,     0,     0,   384,   385,   386,   389,     0,   387,   388,
-       0,     0,     0,     0,     0,     0,     0,   580,     0,     0,
-       0,   389,     0,     0,     0,     0,     0,     0,     0,   380,
+      54,   230,    45,    78,   217,   406,   258,   331,   448,    81,
+     357,   414,    60,    52,   257,    55,   264,   465,    70,    62,
+     407,    63,    69,   410,    72,   412,   461,   249,   417,   250,
+     443,  -411,   599,   424,   246,   246,   246,   228,   352,   353,
+     246,   664,   455,   280,   247,   248,   282,  -261,   639,   266,
+     640,   249,   645,   250,   506,   231,   642,  -261,     3,    14,
+      28,   232,   185,   717,   226,   251,   189,   225,   468,   696,
+      12,    82,   108,   110,    12,   457,   718,   670,   526,   380,
+     530,    89,   676,   381,   382,   383,   384,   385,   386,   251,
+     344,   551,   551,   203,   697,   283,  -261,   252,   -45,    18,
+      95,    28,   269,   487,   491,   527,  -261,   531,   249,    43,
+     250,   438,   439,   724,   506,   270,   671,   317,   552,   558,
+     271,   252,   673,   101,    23,   355,   102,   249,   574,   250,
+     356,   451,    97,   466,   456,    83,   664,    43,   376,   318,
+     588,   377,   700,   504,   505,   506,   251,   682,   387,   683,
+     685,    12,   253,   362,    87,    43,    88,   569,   450,   687,
+     258,   485,   456,   456,   215,   251,   355,   100,   257,   355,
+      32,   646,   105,   103,   678,   363,   253,   104,   252,   254,
+     701,   703,    37,   106,   -40,   233,   258,   258,   111,   234,
+     708,   706,   218,   235,   257,   257,   388,   252,   506,   347,
+     236,     5,     6,   254,    90,   237,    91,   369,   715,   598,
+      43,   238,   275,   484,    54,    54,   379,    78,    78,   255,
+      92,   346,    93,    81,    81,   246,    98,   389,    99,    55,
+      55,   572,   719,   253,   358,   256,    43,   600,   276,   488,
+     390,   524,   525,   255,   279,   425,   416,   107,   428,    93,
+     435,   436,   253,   610,   637,   442,   108,   110,   242,   256,
+     254,   239,   109,   656,    93,   657,   391,   241,   244,   392,
+     393,   469,   -42,   267,   395,   396,   -44,   277,   449,   254,
+    -261,   258,   -41,   470,   649,   278,  -261,   397,   -43,   257,
+     281,   521,   522,   523,   333,   284,    93,   415,   285,   647,
+     542,   524,   525,   416,   659,   334,   465,   335,   336,   286,
+     337,   355,   338,   339,    93,    93,   543,   287,   288,   542,
+     519,   520,   521,   522,   523,   359,   249,   360,   250,   689,
+     355,   -46,   524,   525,   289,   543,   290,   465,   429,   430,
+     431,   432,   433,  -254,   503,  -254,   291,   292,   464,   465,
+     463,    78,   293,   294,   415,   295,   610,    81,   296,    43,
+     654,   610,   541,    55,   679,   297,   298,   465,   299,   340,
+     710,   300,   489,   519,   520,   521,   522,   523,   301,   258,
+     302,   303,   304,   305,   306,   524,   525,   257,   307,   308,
+     309,   -47,   504,   505,   506,   507,   508,   509,   510,   511,
+     512,   310,   311,   578,   312,   313,   314,   -48,   712,   315,
+     369,   230,   349,   316,   364,   375,   354,   365,   370,   371,
+     373,   610,   403,   404,   408,   409,   411,   421,   423,   441,
+     444,   445,   601,   447,   454,   691,   446,  -261,   504,   505,
+     506,   611,   606,   509,   510,   721,   459,   460,   476,   467,
+     478,    54,   480,    45,    78,   479,   582,   579,   481,   464,
+      81,   463,    78,    60,    52,   231,    55,   575,    81,    70,
+      62,   232,    63,    69,    55,    72,   482,   225,   492,    10,
+     493,   643,   494,   495,   556,   528,   529,   532,   533,   534,
+     416,   535,   602,   536,   401,   537,   538,   401,   540,   550,
+     553,   554,   555,   570,   413,   557,   560,   420,   258,   561,
+     562,   456,   456,   420,   427,   563,   257,   565,   564,   566,
+     567,   577,    21,   568,   652,   580,   585,    22,   591,   230,
+     592,   594,   603,   669,   604,    24,    25,    26,    27,   416,
+     605,   415,   617,   635,   611,    29,   638,   674,   650,   611,
+     651,   655,   653,    83,   667,   662,   416,   693,   694,   711,
+     401,   471,   513,   677,   514,   515,   516,   517,   518,   519,
+     520,   521,   522,   523,   684,   686,   688,   698,   722,   723,
+     699,   524,   525,   258,   702,    34,   704,   709,   539,    36,
+     415,   257,   716,   416,   728,   453,   597,   496,   497,   498,
+     499,   500,   501,   502,   648,   586,   727,   415,   437,   611,
+     584,   426,   348,   517,   518,   519,   520,   521,   522,   523,
+     227,   422,   660,   713,   341,   416,   380,   524,   525,   274,
+     381,   382,   383,   384,   385,   386,   663,   661,     0,     0,
+     477,     0,     0,     0,   415,     0,     0,     0,     0,     0,
+      54,     0,     0,    78,   464,     0,   463,    78,     0,    81,
+       0,     0,     0,    81,     0,    55,   251,     0,     0,    55,
+       0,    12,     0,     0,     0,   499,   415,     0,     0,     0,
+       0,     0,     0,   504,   505,   506,   507,   508,   509,   510,
+       0,     0,     0,     0,     0,   387,     0,     0,   252,     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,     4,     5,     0,     0,     0,
-     381,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   382,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     7,     0,     8,     0,     0,     0,
-       0,     0,     9,    10,     0,     0,    11,     0,     0,   383,
-       0,    12,   384,   385,   386,     0,     0,   387,   388,     0,
-      13,     0,    14,     0,     0,     0,     0,     0,    15,    16,
-     389,    17,     0,     0,     0,    18,     0,     0,    19,     0,
-       0,     0,     0,     0,     0,    20,     0,     0,     0,     0,
-       0,     0,    21,   315,     0,     0,    22,     0,    23,    24,
-      25,    26,    27,     0,     0,     0,     0,     0,    28,     0,
-       0,     0,     0,    29,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     4,     5,     0,     0,     0,     0,
-      30,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    31,     0,     0,     0,     0,    32,    33,    34,
-       0,     0,    35,     7,    36,     8,     0,     0,    37,     0,
-       0,     9,    10,     0,     0,    11,     0,    38,     0,    39,
-      12,     0,     0,     0,     0,     0,     0,    40,    41,    13,
-       0,    14,     0,     0,     0,     0,     0,    15,    16,     0,
-      17,     0,     0,     0,    18,     0,     0,    19,     0,     0,
-       0,     0,     0,     0,    20,     0,    42,     0,     0,   325,
-       0,    21,   315,     0,     0,    22,     0,    23,    24,    25,
-      26,    27,     0,     0,     0,     0,     0,    28,     0,     0,
-       0,     0,    29,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     4,     5,     0,     0,     0,     0,    30,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    31,     0,     0,     0,     0,    32,    33,    34,     0,
-       0,    35,     7,    36,     8,     0,     0,    37,     0,     0,
-       9,    10,     0,     0,    11,     0,    38,     0,    39,    12,
-       0,     0,     0,     0,     0,     0,    40,    41,    13,     0,
-      14,     0,     0,     0,     0,     0,    15,    16,     0,    17,
-       0,     0,     0,    18,     0,     0,    19,     0,     0,     0,
-       0,     0,     0,    20,     0,    42,     0,     0,   679,     0,
-      21,     0,     0,     0,    22,     0,    23,    24,    25,    26,
-      27,     0,     0,     0,     0,     0,    28,     4,     5,     0,
-       0,    29,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    30,     0,
-       0,     0,     0,     0,     0,     0,     7,     0,     8,     0,
-      31,     0,     0,     0,     9,    32,    33,    34,    11,     0,
-      35,     0,    36,    12,     0,     0,    37,     0,     0,     0,
-       0,     0,     0,     0,    14,    38,     0,    39,     0,     0,
-      15,    16,     0,    17,     0,    40,    41,    18,     0,     0,
-      19,     0,     0,     0,     0,     0,     0,    20,     0,     0,
-       0,     0,     0,     0,    21,     0,     0,     0,    22,     0,
-      23,    24,    25,    26,    42,     0,     0,   567,     0,     0,
-      28,     4,     5,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    30,     0,     0,     0,     0,     0,     0,     0,
-       7,     0,     8,     0,    31,     0,     0,     0,     9,    32,
-      33,    34,    11,     0,    35,     0,    36,    12,     0,     0,
-      37,     0,     0,     0,     0,     0,     0,     0,    14,    38,
-       0,    39,     0,     0,    15,    16,     0,    17,     0,    40,
-      41,    18,     0,     0,    19,     0,     0,     0,     0,     0,
+     615,   616,     0,   618,   619,   620,   621,   622,   623,   624,
+     625,   626,   627,   628,   629,   630,   631,   632,   633,   634,
+     380,   636,     5,     6,   381,   382,   383,   384,   385,   386,
+     380,     0,     0,   388,   381,   382,   383,   384,   385,   386,
+       0,     0,     0,   253,     0,     0,     0,   420,     0,     0,
+       0,     8,     0,     9,     0,     0,     0,     0,     0,    10,
+       0,     0,     0,    12,   389,     0,     0,     0,     0,     0,
+     254,     0,     0,     0,     0,     0,     0,   390,     0,    15,
+       0,     0,     0,     0,     0,   219,    17,   251,    18,   387,
+       0,     0,    19,     0,     0,    20,     0,     0,     0,   387,
+       0,     0,    21,   391,     0,     0,   392,   393,   394,     0,
+     608,   395,   396,    23,     0,    24,    25,    26,    27,   252,
+     589,   355,     0,     0,   397,    29,   609,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   388,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   388,   517,   518,
+     519,   520,   521,   522,   523,     0,     0,     0,     0,    32,
+       0,     0,   524,   525,    33,    34,    35,     0,   389,    36,
+       0,    37,     0,   705,   253,   222,   707,     0,   389,     0,
+       0,   390,     0,     0,   223,     0,    40,     0,     0,     0,
+     401,   390,     0,     0,    41,    42,     0,     4,     5,     6,
+       0,   254,     0,     0,     0,     0,     0,   391,     0,     0,
+     392,   393,   394,     0,     0,   395,   396,   391,     0,     0,
+     392,   393,   394,     0,     0,   395,   396,     8,   397,     9,
+       0,     0,     0,     0,     0,    10,    11,     0,   397,    12,
+       0,   608,     0,     0,    13,     0,     0,     0,     0,     0,
+       0,     0,   355,    14,     0,    15,     0,   609,     0,     0,
+       0,    16,    17,     0,    18,     0,     0,     0,    19,     0,
        0,    20,     0,     0,     0,     0,     0,     0,    21,     0,
-       0,     0,    22,     0,    23,    24,    25,    26,    42,     0,
-       0,   454,     0,     0,    28,     4,     5,     0,     0,     0,
-       0,     0,   495,   496,   497,   498,   499,   500,   501,   502,
-     503,     0,     0,     0,     0,     0,    30,     0,     0,     0,
-       0,     0,     0,     0,     7,     0,     8,     0,    31,     0,
-       0,     0,     9,    32,    33,    34,    11,     0,    35,     0,
-      36,    12,     0,     0,    37,     0,     0,     0,     0,     0,
-       0,     0,    14,    38,     0,    39,     0,     0,    15,    16,
-       0,    17,     0,    40,    41,    18,     0,     0,    19,     0,
-       0,     5,     0,     0,     0,    20,     0,     0,     0,     0,
-       0,     0,    21,     0,     0,     0,    22,     0,    23,    24,
-      25,    26,    42,     0,     0,   578,     0,     0,    28,     7,
-       0,     8,     0,     0,     0,     0,     0,     9,     0,     0,
-       0,    11,     0,     0,     0,     0,     0,     0,     0,     0,
-      30,     0,     0,     0,     0,     0,     0,    14,     0,     0,
-       0,     0,    31,   215,    16,     0,    17,    32,    33,    34,
-      18,     0,    35,    19,    36,     0,     0,     0,    37,     0,
-      20,     0,     0,     0,     0,     0,     0,    38,     0,    39,
-       0,    22,     0,    23,    24,    25,    26,    40,    41,     0,
-       0,     0,   504,    28,   505,   506,   507,   508,   509,   510,
-     511,   512,   513,   514,     0,     0,     0,     0,     0,     0,
-       0,   515,   516,     0,     0,     0,    42,     0,   550,   681,
-       4,     5,     0,     0,     0,     0,     0,    31,     0,     0,
-       6,     0,    32,    33,    34,     0,     0,    35,     0,    36,
-       0,     0,     0,   218,     0,     0,     0,     0,     0,     7,
-       0,     8,   219,     0,    39,     0,     0,     9,    10,     0,
-       0,    11,    40,    41,     0,     0,    12,     0,     0,     0,
-       0,     0,     0,     0,     0,    13,     0,    14,     0,     0,
-       0,     0,     0,    15,    16,     0,    17,     0,     0,     0,
-      18,    42,     0,    19,   572,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    22,   320,     0,     0,    23,
+       0,    24,    25,    26,    27,    28,     0,     0,     0,     0,
+       0,    29,     0,     0,     0,     0,    30,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     4,     5,     6,     0,
+       0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
+      33,    34,    35,     0,     0,    36,     8,    37,     9,     0,
+       0,    38,     0,     0,    10,    11,     0,     0,    12,     0,
+      39,     0,    40,    13,     0,     0,     0,     0,     0,     0,
+      41,    42,    14,     0,    15,     0,     0,     0,     0,     0,
+      16,    17,     0,    18,     0,     0,     0,    19,     0,     0,
+      20,     0,     0,     0,     0,     0,     0,    21,     0,    43,
+       0,     0,   330,     0,    22,   320,     0,     0,    23,     0,
+      24,    25,    26,    27,    28,     0,     0,     0,     0,     0,
+      29,     0,     0,     0,     0,    30,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     4,     5,     6,     0,     0,
+       0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    32,     0,     0,     0,     0,    33,
+      34,    35,     0,     0,    36,     8,    37,     9,     0,     0,
+      38,     0,     0,    10,    11,     0,     0,    12,     0,    39,
+       0,    40,    13,     0,     0,     0,     0,     0,     0,    41,
+      42,    14,     0,    15,     0,     0,     0,     0,     0,    16,
+      17,     0,    18,     0,     0,     0,    19,     0,     0,    20,
+       0,     0,     0,     0,     0,     0,    21,     0,    43,     0,
+       0,   690,     0,    22,     0,     0,     0,    23,     0,    24,
+      25,    26,    27,    28,     0,     0,     0,     0,     0,    29,
+       0,     0,     0,     0,    30,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     4,     5,     6,     0,     0,     0,
+       0,    31,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    32,     0,     0,     0,     0,    33,    34,
+      35,     0,     0,    36,     8,    37,     9,     0,     0,    38,
+       0,     0,    10,     0,     0,     0,    12,     0,    39,     0,
+      40,    13,     0,     0,     0,     0,     0,     0,    41,    42,
+       0,     0,    15,     0,     0,     0,     0,     0,    16,    17,
+       0,    18,     0,     0,     0,    19,     0,     0,    20,     0,
+       0,     0,     0,     0,     0,    21,     0,    43,     0,     0,
+     576,     0,    22,     0,     0,     0,    23,     0,    24,    25,
+      26,    27,     0,     0,     0,     0,     0,     0,    29,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     4,     5,     6,     0,     0,     0,     0,
+      31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    32,     0,     0,     0,     0,    33,    34,    35,
+       0,     0,    36,     8,    37,     9,     0,     0,    38,     0,
+       0,    10,     0,     0,     0,    12,     0,    39,     0,    40,
+      13,     0,     0,     0,     0,     0,     0,    41,    42,     0,
+       0,    15,     0,     0,     0,     0,     0,    16,    17,     0,
+      18,     0,     0,     0,    19,     0,     0,    20,     0,     0,
+       0,     0,     0,     0,    21,     0,    43,     0,     0,   462,
+       0,    22,     0,     0,     0,    23,     0,    24,    25,    26,
+      27,     0,     0,     0,     0,     0,     0,    29,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     4,     5,     6,     0,     0,     0,     0,    31,
+     504,   505,   506,   507,   508,   509,   510,   511,   512,     0,
+       0,    32,     0,     0,     0,     0,    33,    34,    35,     0,
+       0,    36,     8,    37,     9,     0,     0,    38,     0,     0,
+      10,     0,     0,     0,    12,     0,    39,     0,    40,    13,
+       0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
+      15,     0,     0,     0,     0,     0,    16,    17,     0,    18,
+       0,     0,     0,    19,     0,     0,    20,     0,     5,     6,
+       0,     0,     0,    21,     0,    43,     0,     0,   587,     0,
+      22,     0,     0,     0,    23,     0,    24,    25,    26,    27,
+       0,     0,     0,     0,     0,     0,    29,     8,     0,     9,
+       0,     0,     0,     0,     0,    10,     0,     0,     0,    12,
+       0,     0,     0,     0,     0,     0,     0,     0,    31,     0,
+       0,     0,     0,     0,     0,    15,     0,     0,     0,     0,
+      32,   219,    17,     0,    18,    33,    34,    35,    19,     0,
+      36,    20,    37,     0,     0,     0,    38,     0,    21,     0,
+       0,     0,     0,     0,     0,    39,     0,    40,     0,    23,
+       0,    24,    25,    26,    27,    41,    42,     0,     0,     0,
+     513,    29,   514,   515,   516,   517,   518,   519,   520,   521,
+     522,   523,     0,     0,     0,     0,     0,     0,     0,   524,
+     525,     0,     0,     0,    43,     0,   559,   692,     0,     0,
+       0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
+      33,    34,    35,     0,     0,    36,     0,    37,     4,     5,
+       6,   222,     0,     0,     0,     0,     0,     0,     0,     7,
+     223,     0,    40,     0,     0,     0,     0,     0,     0,     0,
+      41,    42,     0,     0,     0,     0,     0,     0,     8,     0,
+       9,     0,     0,     0,     0,     0,    10,    11,     0,     0,
+      12,     0,     0,     0,     0,    13,     0,     0,     0,    43,
+       0,     0,   581,     0,    14,     0,    15,     0,     0,     0,
+       0,     0,    16,    17,     0,    18,     0,     0,     0,    19,
+       0,     0,    20,     0,     0,     0,     0,     0,     0,    21,
+       0,     0,     0,     0,     0,     0,    22,     0,     0,     0,
+      23,     0,    24,    25,    26,    27,    28,     0,     0,     0,
+       0,     0,    29,     0,     0,     0,     0,    30,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    31,     0,     0,     0,     4,     5,
+       6,     0,     0,     0,     0,     0,    32,     0,   319,     0,
+       0,    33,    34,    35,     0,     0,    36,     0,    37,     0,
+       0,     0,    38,     0,     0,     0,     0,     0,     8,   -68,
+       9,    39,     0,    40,     0,     0,    10,    11,     0,     0,
+      12,    41,    42,     0,     0,    13,     0,     0,     0,     0,
+       0,     0,     0,     0,    14,     0,    15,     0,     0,     0,
+       0,     0,    16,    17,     0,    18,     0,     0,     0,    19,
+      43,     0,    20,     0,     0,     0,     0,     0,     0,    21,
+       0,     0,     0,     0,     0,     0,    22,   320,     0,     0,
+      23,     0,    24,    25,    26,    27,    28,     0,     0,     0,
+       0,     0,    29,     0,     0,     0,     0,    30,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
+       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    32,     0,     0,     0,
+       0,    33,    34,    35,     0,     0,    36,     8,    37,     9,
+       0,     0,    38,     0,   251,    10,     0,     0,     0,    12,
+       0,    39,     0,    40,     0,     0,     0,     0,     0,     0,
+       0,    41,    42,     0,     0,    15,     0,     0,     0,     0,
+       0,   219,    17,     0,    18,     0,   252,     0,    19,     0,
+       0,    20,     0,     0,     0,     0,     0,     0,    21,     0,
+      43,     0,     0,     0,     0,     0,     5,     6,     0,    23,
+       0,    24,    25,    26,    27,     0,     0,     0,     0,     0,
+       0,    29,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     8,     0,     9,     0,     0,
+       0,   253,   251,    10,     0,     0,     0,    12,     0,     0,
+       0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
+      33,    34,    35,    15,     0,    36,     0,    37,   254,   219,
+      17,   222,    18,     0,   252,     0,    19,     0,     0,    20,
+     223,     0,    40,     0,     0,     0,    21,     0,     0,     0,
+      41,    42,     0,     0,     5,     6,     0,    23,     0,    24,
+      25,    26,    27,     0,     0,     0,     0,     0,   641,    29,
+       0,     0,     0,     0,   658,     0,     0,     0,     0,    43,
+       0,     0,     0,     8,     0,     9,     0,     0,     0,   253,
+       0,    10,     0,     0,     0,    12,     0,     0,     0,     0,
+       0,     0,     0,    32,     0,     0,     0,     0,    33,    34,
+      35,    15,     0,    36,     0,    37,   254,   219,    17,   222,
+      18,     0,     0,     0,    19,     0,     0,    20,   223,     0,
+      40,     0,     0,     0,    21,     0,     0,     0,    41,    42,
+       0,     0,     5,     6,     0,    23,     0,    24,    25,    26,
+      27,     0,     0,     0,     0,     0,   672,    29,   504,   505,
+     506,   507,   508,   509,   510,   511,   512,    43,     0,     0,
+       0,     8,     0,     9,     0,     0,     0,     0,     0,    10,
+       0,     0,     0,    12,     0,     0,     0,     0,     0,     0,
+       0,    32,     0,     0,     0,     0,    33,    34,    35,    15,
+       0,    36,     0,    37,     0,   219,    17,   222,    18,     0,
+       0,     0,    19,     0,     0,    20,   223,     0,    40,     0,
+       0,     0,    21,     0,     0,     0,    41,    42,     0,     0,
+       0,     0,     0,    23,     0,    24,    25,    26,    27,     0,
+       0,     0,     0,     0,     0,    29,   504,   505,   506,   507,
+     508,   509,   510,   511,   512,    43,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   504,   505,
+     506,   507,   508,   509,   510,   511,   512,     0,     0,    32,
+       0,     0,     0,     0,    33,    34,    35,     0,     0,    36,
+       0,    37,     0,     0,     0,   222,     0,     0,     0,     0,
+       0,     0,     0,     0,   223,     0,    40,     0,     0,     0,
+       0,     0,     0,     0,    41,    42,   504,   505,   506,   507,
+     508,   509,   510,   511,   512,     0,     0,     0,   513,     0,
+     514,   515,   516,   517,   518,   519,   520,   521,   522,   523,
+       0,     0,     0,    43,     0,     0,     0,   524,   525,     0,
+       0,     0,     0,     0,   607,   504,   505,   506,   507,   508,
+     509,   510,   511,   512,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   504,   505,   506,   507,   508,   509,
+     510,     0,   512,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   504,   505,   506,   507,   508,   509,   510,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   513,     0,   514,   515,
+     516,   517,   518,   519,   520,   521,   522,   523,   504,   505,
+     506,   507,   508,   509,   510,   524,   525,   590,   513,     0,
+     514,   515,   516,   517,   518,   519,   520,   521,   522,   523,
+     504,   505,   506,   507,   508,   509,   510,   524,   525,   681,
+       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,   513,   680,   514,   515,
+     516,   517,   518,   519,   520,   521,   522,   523,     0,     0,
+       0,     0,     0,     0,     0,   524,   525,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   513,     0,   514,   515,   516,
+     517,   518,   519,   520,   521,   522,   523,     0,     0,     0,
+       0,     0,     0,     0,   524,   525,   514,   515,   516,   517,
+     518,   519,   520,   521,   522,   523,     0,     0,     0,     0,
+       0,     0,     0,   524,   525,   514,   515,   516,   517,   518,
+     519,   520,   521,   522,   523,     0,     0,     0,     0,     0,
+       0,     0,   524,   525,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   515,   516,   517,   518,   519,   520,   521,   522,   523,
+       0,     0,     5,     6,     0,     0,     0,   524,   525,     0,
+       0,     0,     0,     0,   516,   517,   518,   519,   520,   521,
+     522,   523,     0,     0,     0,     0,     0,     0,     0,   524,
+     525,     8,     0,     9,     0,     0,     0,     0,     0,    10,
+      11,     0,     0,    12,     0,     0,     0,     5,     6,     0,
+       0,     0,     0,     0,     0,     0,     0,    14,     0,    15,
+       0,     0,     0,     0,     0,   219,    17,     0,    18,     0,
+       0,     0,    19,     0,     0,    20,     8,     0,     9,     0,
+       0,     0,    21,     0,    10,     0,     0,     0,    12,     0,
+       0,     0,     0,    23,     0,    24,    25,    26,    27,    28,
+       0,     0,   220,     0,    15,    29,     0,     0,     0,   221,
+     219,    17,     0,    18,     0,     0,     0,    19,     0,     0,
       20,     0,     0,     0,     0,     0,     0,    21,     0,     0,
-       0,    22,     0,    23,    24,    25,    26,    27,     0,     0,
-       0,     0,     0,    28,     0,     0,     0,     0,    29,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    23,    32,
+      24,    25,    26,    27,    33,    34,    35,     0,     0,    36,
+      29,    37,     0,     0,     0,   222,     0,     0,     0,     0,
+       0,     0,     0,     0,   223,     0,    40,     0,     5,     6,
+       0,     0,     0,     0,    41,    42,     0,     0,     0,     0,
+       0,     0,     0,     0,    32,     0,     0,     0,     0,    33,
+      34,    35,     0,     0,    36,     0,    37,     8,     0,     9,
+     222,     0,     0,     0,     0,    10,     0,     0,     0,   223,
+       0,    40,     0,     0,     0,     0,     0,     0,     0,    41,
+      42,     0,     0,     0,     0,    15,     0,     0,     0,     0,
+       0,   219,    17,     0,     0,     0,     0,     0,    19,     0,
+       0,    20,     0,     0,     0,     0,     0,     0,    21,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    30,     0,     0,     0,     0,
-       4,     5,     0,     0,     0,     0,     0,    31,     0,   314,
-       0,     0,    32,    33,    34,     0,     0,    35,     0,    36,
-       0,     0,     0,    37,     0,     0,     0,     0,     0,     7,
-     -68,     8,    38,     0,    39,     0,     0,     9,    10,     0,
-       0,    11,    40,    41,     0,     0,    12,     0,     0,     0,
-       0,     0,     0,     0,     0,    13,     0,    14,     0,     0,
-       0,     0,     0,    15,    16,     0,    17,     0,     0,     0,
-      18,    42,     0,    19,     0,     0,     0,     0,     0,     0,
-      20,     0,     0,     0,     0,     0,     0,    21,   315,     0,
-       0,    22,     0,    23,    24,    25,    26,    27,     5,     0,
-       0,     0,     0,    28,     0,     0,     0,     0,    29,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    30,     7,     0,     8,     0,
-       0,     0,     0,   247,     9,     0,     0,    31,    11,     0,
-       0,     0,    32,    33,    34,     0,     0,    35,     0,    36,
-       0,     0,     0,    37,    14,     0,     0,     0,     0,     0,
-     215,    16,    38,    17,    39,   248,     0,    18,     0,     0,
-      19,     0,    40,    41,     0,     0,     0,    20,     0,     0,
-       0,     0,     0,     0,     0,     0,     5,     0,    22,     0,
-      23,    24,    25,    26,     0,     0,     0,     0,     0,     0,
-      28,    42,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     7,     0,     8,     0,     0,     0,
-     249,   247,     9,     0,     0,     0,    11,     0,     0,     0,
-       0,     0,     0,     0,    31,     0,     0,     0,     0,    32,
-      33,    34,    14,     0,    35,     0,    36,   250,   215,    16,
-     218,    17,     0,   248,     0,    18,     0,     0,    19,   219,
-       0,    39,     0,     0,     0,    20,     0,     0,     0,    40,
-      41,     0,     0,     0,     5,     0,    22,     0,    23,    24,
-      25,    26,     0,     0,     0,     0,     0,   631,    28,     0,
-       0,     0,     0,   648,     0,     0,     0,     0,    42,     0,
-       0,     0,     7,     0,     8,     0,     0,     0,   249,     0,
-       9,     0,     0,     0,    11,     0,     0,     0,     0,     0,
-       0,     0,    31,     0,     0,     0,     0,    32,    33,    34,
-      14,     0,    35,     0,    36,   250,   215,    16,   218,    17,
-       0,     0,     0,    18,     0,     0,    19,   219,     0,    39,
-       0,     0,     0,    20,     0,     0,     0,    40,    41,     0,
-       0,     0,     5,     0,    22,     0,    23,    24,    25,    26,
-       0,     0,     0,     0,     0,   661,    28,   495,   496,   497,
-     498,   499,   500,   501,   502,   503,    42,     0,     0,     0,
-       7,     0,     8,     0,     0,     0,     0,     0,     9,     0,
-       0,     0,    11,     0,     0,     0,     0,     0,     0,     0,
-      31,     0,     0,     0,     0,    32,    33,    34,    14,     0,
-      35,     0,    36,     0,   215,    16,   218,    17,     0,     0,
-       0,    18,     0,     0,    19,   219,     0,    39,     0,     0,
-       0,    20,     0,     0,     0,    40,    41,     0,     0,     0,
-       0,     0,    22,     0,    23,    24,    25,    26,     0,     0,
-       0,     0,     0,     0,    28,   495,   496,   497,   498,   499,
-     500,   501,   502,   503,    42,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   495,   496,   497,
-     498,   499,   500,   501,   502,   503,     0,     0,    31,     0,
-       0,     0,     0,    32,    33,    34,     0,     0,    35,     0,
-      36,     0,     0,     0,   218,     0,     0,     0,     0,     0,
-       0,     0,     0,   219,     0,    39,     0,     0,     0,     0,
-       0,     0,     0,    40,    41,   495,   496,   497,   498,   499,
-     500,   501,   502,   503,     0,     0,     0,   504,     0,   505,
-     506,   507,   508,   509,   510,   511,   512,   513,   514,     0,
-       0,     0,    42,     0,     0,     0,   515,   516,     0,     0,
-       0,     0,     0,   597,   495,   496,   497,   498,   499,   500,
-     501,   502,   503,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   495,   496,   497,   498,   499,   500,   501,
-       0,   503,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   495,   496,   497,   498,   499,   500,   501,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   504,     0,   505,   506,   507,
-     508,   509,   510,   511,   512,   513,   514,   495,   496,   497,
-     498,   499,   500,   501,   515,   516,   581,   504,     0,   505,
-     506,   507,   508,   509,   510,   511,   512,   513,   514,   495,
-     496,   497,   498,   499,   500,   501,   515,   516,   670,     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,   504,   669,   505,   506,   507,
-     508,   509,   510,   511,   512,   513,   514,     0,     0,     0,
-       0,     0,     0,     0,   515,   516,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   504,     0,   505,   506,   507,   508,
-     509,   510,   511,   512,   513,   514,     0,     0,     0,     0,
-       0,     0,     0,   515,   516,   505,   506,   507,   508,   509,
-     510,   511,   512,   513,   514,     0,     0,     0,     0,     0,
-       0,     0,   515,   516,   505,   506,   507,   508,   509,   510,
-     511,   512,   513,   514,     0,     0,     0,     0,     0,     0,
-       0,   515,   516,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     506,   507,   508,   509,   510,   511,   512,   513,   514,     0,
-       0,     0,     5,     0,     0,     0,   515,   516,     0,     0,
-       0,     0,     0,   507,   508,   509,   510,   511,   512,   513,
-     514,     0,     0,     0,     0,     0,     0,     0,   515,   516,
-       7,     0,     8,     0,     0,     0,     0,     0,     9,    10,
-       0,     0,    11,     0,     0,     0,     0,     5,     0,     0,
-       0,     0,     0,     0,     0,     0,    13,     0,    14,     0,
-       0,     0,     0,     0,   215,    16,     0,    17,     0,     0,
-       0,    18,     0,     0,    19,     7,     0,     8,     0,     0,
-       0,    20,     0,     9,     0,     0,     0,    11,     0,     0,
-       0,     0,    22,     0,    23,    24,    25,    26,    27,     0,
-       0,   216,     0,    14,    28,     0,     0,     0,   217,   215,
-      16,     0,    17,     0,     0,     0,    18,     0,     0,    19,
-       0,     0,     0,     0,     0,     0,    20,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    22,    31,    23,
-      24,    25,    26,    32,    33,    34,     0,     0,    35,    28,
-      36,     5,     0,     0,   218,     0,     0,     0,     0,     0,
-       0,     0,     0,   219,     0,    39,     0,     0,     0,     0,
-       0,     0,     0,    40,    41,     0,     0,     0,     0,     7,
-       0,     8,     0,    31,     0,     0,     0,     9,    32,    33,
-      34,     0,     0,    35,     0,    36,     0,     0,     0,   218,
-       0,     0,     0,     0,     0,     0,     0,    14,   219,     0,
-      39,     0,     0,   215,    16,     0,     0,     0,    40,    41,
-      18,     0,     0,    19,     0,     0,     0,     0,     0,     0,
-      20,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    23,    24,    25,    26,     0,     0,     0,
-       0,     0,     0,    28,     0,     0,     0,     0,     0,     0,
+       0,    24,    25,    26,    27,     0,     0,     0,     0,     0,
+       0,    29,     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,    32,    33,    34,     0,     0,    35,     0,     0,
-       0,     0,     0,   218,     0,     0,     0,     0,     0,     0,
-       0,     0,   219,     0,    39,     0,     0,     0,     0,     0,
-       0,     0,    40,    41,   108,     0,   109,   110,   111,   112,
-     113,   114,     0,   115,     0,     0,   116,     0,   117,     0,
-       0,     0,   118,   119,     0,   120,   121,   122,   123,     0,
-     124,   125,   126,   127,   128,   129,   130,   131,     0,   132,
-       0,   133,   134,   135,   136,   137,     0,     0,   138,     0,
-       0,     0,   139,     0,   140,   141,     0,   142,   143,   144,
-     145,   146,   147,     0,   148,   149,   150,   151,   152,   153,
-       0,     0,   154,     0,     0,   155,     0,     0,     0,     0,
-       0,   156,   157,     0,   158,   159,     0,   160,   161,     0,
-       0,     0,   162,   163,   164,   165,   166,   167,     0,   168,
-     169,   170,   171,   172,   173,   174,     0,   175,     0,   176,
-       0,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-       0,   186,   187,   188,   189,     0,     0,     0,   190,     0,
-       0,   191,     0,     0,   192,   193,     0,     0,   194,   195,
-     196,   197,     0,     0,   198,     0,   199,     0,   200,   201,
-     202,   203,   204,   205,   206,     0,     0,   207
+      33,    34,    35,     0,     0,    36,     0,     0,     0,     0,
+       0,   222,     0,     0,     0,     0,     0,     0,     0,     0,
+     223,     0,    40,     0,     0,     0,     0,     0,     0,     0,
+      41,    42,   112,     0,   113,   114,   115,   116,   117,   118,
+       0,   119,     0,     0,   120,     0,   121,     0,     0,     0,
+     122,   123,     0,   124,   125,   126,   127,     0,   128,   129,
+     130,   131,   132,   133,   134,   135,     0,   136,     0,   137,
+     138,   139,   140,   141,     0,     0,   142,     0,     0,     0,
+     143,     0,   144,   145,     0,   146,   147,   148,   149,   150,
+     151,     0,   152,   153,   154,   155,   156,   157,     0,     0,
+     158,     0,     0,   159,     0,     0,     0,     0,     0,   160,
+     161,     0,   162,   163,     0,   164,   165,     0,     0,     0,
+     166,   167,   168,   169,   170,   171,     0,   172,   173,   174,
+     175,   176,   177,   178,     0,   179,     0,   180,     0,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,     0,   190,
+     191,   192,   193,     0,     0,     0,   194,     0,     0,   195,
+       0,     0,   196,   197,     0,     0,   198,   199,   200,   201,
+       0,     0,   202,     0,   203,     0,   204,   205,   206,   207,
+     208,   209,   210,     0,     0,   211
 };
 
 static const yytype_int16 yycheck[] =
 {
-       2,    53,     2,     2,    50,    74,   286,     2,    74,     2,
-     325,   214,     2,     2,   256,     2,   252,   253,     2,     2,
-     534,     2,     2,   287,     6,    75,   290,   344,   292,    72,
-      73,   295,   591,   294,    77,    53,   300,   533,    39,   346,
-     312,    71,    72,    73,   101,   110,   158,    77,    59,   184,
-     100,    52,   184,    17,    53,     3,   596,     5,    53,   101,
-      53,   601,    37,    38,   158,   184,    53,   158,   136,   349,
-      28,    17,   140,   184,   206,    33,   211,     3,   184,     5,
-       3,   184,     5,   205,   184,   599,   208,   206,   283,   131,
-     101,   286,    40,     9,     0,   207,    12,    45,   293,   167,
-     211,   296,   598,   340,   205,   211,   209,   302,   303,   210,
-     346,   211,    51,   207,    40,   209,   207,    40,   205,    45,
-     660,   210,   636,   210,    72,    64,   685,   442,   365,   366,
-      69,   205,    97,    34,   337,   631,   210,   340,    39,   454,
-     205,   179,   180,   181,   182,   183,    72,   205,   205,    72,
-       3,   209,     5,   667,   349,   350,   205,   226,     9,   208,
-     226,   364,   365,   366,   436,   661,   205,     3,     3,   208,
-       5,   207,     3,    45,     5,     3,   210,     5,     3,   127,
-       5,   210,   209,   252,   253,   164,   252,   253,   383,   384,
-     385,   386,   387,   388,   389,     3,   209,     5,    70,   209,
-       3,   127,     5,   272,   127,   441,   154,   208,   472,   207,
-     212,   213,   281,   212,   213,    40,   234,   260,   209,   212,
-     213,   209,   207,    95,   209,   212,   213,   186,   154,   211,
-     260,   154,   209,    15,    16,    17,    18,    19,    20,    21,
-     204,   205,   294,   218,   219,   207,   194,    72,   194,   195,
-     196,   301,   494,   517,   304,   209,   306,   307,   204,   205,
-     577,   311,   210,   578,   207,   207,   461,   209,   194,   141,
-       3,   194,     5,     3,   326,     5,     3,   346,     5,   205,
-     346,   153,   205,   547,   210,   209,     3,   210,     5,     3,
-     209,     5,   294,     3,     3,     5,     5,   209,   540,   351,
-     495,   496,   127,   498,   499,   500,   501,   502,   503,   504,
-     505,   506,   507,   508,   509,   510,   511,   512,   513,   514,
-     101,   516,   583,   630,     9,   209,   641,   211,   207,   154,
-       6,     7,   209,   569,     3,    17,   207,   389,   205,   212,
-     210,   210,   210,   345,   210,   345,   345,   542,   210,   351,
-     210,   210,   345,   660,   596,   407,   210,   209,   345,   601,
-     210,   210,   604,   210,   366,   672,   681,   210,   210,   194,
-     210,   210,   441,   210,    41,   441,   210,   210,   210,     5,
-     210,   210,   209,   690,   210,   210,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,   210,   448,   210,   210,   210,
-     210,   210,   471,   683,   456,   210,   210,   643,   190,   191,
-     192,   193,   194,   195,   196,    40,   210,    84,   660,   210,
-      45,   210,   204,   205,   476,   209,   211,   207,   494,   207,
-      97,    98,    99,   100,   486,   186,   211,   210,     9,     9,
-     107,     9,   706,   445,     9,   445,   445,    72,   450,   448,
-     445,   453,   445,   453,   453,   445,   445,   456,   445,   443,
-     453,   445,   445,   456,   445,   445,   453,     9,   534,   456,
-       9,   666,     9,     9,   669,     9,   205,   211,   210,   186,
-     147,   209,   534,   476,   151,   207,   207,   184,   683,   209,
-     208,   207,   207,   212,     6,   184,   204,    15,    16,    17,
-     569,     9,   127,   569,    91,   211,   211,   211,   711,   712,
-     192,   193,   194,   195,   196,   210,   562,   211,   211,   211,
-     211,   573,   204,   205,   593,   211,   186,   211,   211,   154,
-     596,   583,   534,   599,   211,   601,    40,   211,   211,   211,
-     211,   211,   208,   211,   164,     3,   211,   599,     6,     7,
-       8,     9,    10,    11,   211,   211,   185,   211,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,    72,   194,
-     211,   211,   211,   211,   643,   204,   205,   643,   211,   209,
-     205,   583,   211,   532,   636,   210,   184,   536,   211,   211,
-      15,    16,    17,   209,   660,    20,    21,   599,   209,     3,
-       3,     5,     6,     7,     8,     9,    10,    11,     3,     9,
-       6,   211,   184,    71,     3,   667,   209,     6,     7,     8,
-       9,    10,    11,   127,   205,   208,   211,   209,     5,    33,
-     186,    35,   211,   211,   636,   211,   211,    41,   207,   186,
-     642,    45,   209,   642,   646,   211,   646,   646,   211,   642,
-     154,   211,   211,   646,   186,   642,   209,    61,   338,   646,
-     452,   119,   308,    67,    68,   667,    70,    71,   302,   471,
-      74,   712,    53,    77,   192,   193,   194,   195,   196,   542,
-      84,   630,    71,   450,   633,   226,   204,   205,   685,   298,
-     194,    95,   150,    97,    98,    99,   100,    82,   586,   584,
-      -1,   205,   354,   107,    -1,   163,   210,    -1,    -1,    -1,
-      -1,    -1,    -1,     3,   663,   119,     6,     7,     8,     9,
-      10,    11,    -1,   672,    -1,    -1,    -1,    -1,    -1,    -1,
-     119,   189,    -1,    -1,   192,   193,   194,   141,    -1,   197,
-     198,   690,   146,   147,   148,    -1,   150,   151,   206,   153,
-      -1,    -1,   210,   157,    -1,    -1,    -1,    -1,    -1,   163,
-      -1,   150,   166,    -1,   168,   190,   191,   192,   193,   194,
-     195,   196,   176,   177,   163,    -1,    -1,    -1,    -1,   204,
-     205,    71,    -1,    -1,    -1,   189,    -1,    -1,   192,   193,
-     194,    -1,    -1,   197,   198,    -1,    -1,    -1,    -1,    -1,
-     189,    -1,    -1,   192,   193,   194,   210,    -1,   197,   198,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   206,    -1,    -1,
-      -1,   210,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
+       2,    54,     2,     2,    51,   291,    76,   218,   330,     2,
+     260,   299,     2,     2,    76,     2,    77,   351,     2,     2,
+     292,     2,     2,   295,     2,   297,   349,     3,   300,     5,
+     317,   102,     7,   305,    73,    74,    75,    54,   256,   257,
+      79,   601,   111,   104,    74,    75,   159,   159,   541,    79,
+     542,     3,   545,     5,    18,    54,   543,   159,     0,    60,
+     102,    54,   137,    40,    54,    41,   141,    54,   354,   185,
+      46,   205,    38,    39,    46,   345,    53,   606,   185,     3,
+     185,   211,   611,     7,     8,     9,    10,    11,    12,    41,
+     132,   185,   185,   168,   210,   208,   208,    73,   210,    71,
+      98,   102,    52,   373,   374,   212,   208,   212,     3,   206,
+       5,     7,     8,   210,    18,    65,   608,   185,   212,   212,
+      70,    73,   609,     3,    96,   206,     6,     3,   450,     5,
+     211,   342,    10,   351,   345,   206,   696,   206,    10,   207,
+     462,    13,   671,    16,    17,    18,    41,   640,    72,   641,
+     643,    46,   128,   185,     3,   206,     5,   444,   209,   646,
+     230,   372,   373,   374,   210,    41,   206,    29,   230,   206,
+     142,   211,    34,   211,   211,   207,   128,   211,    73,   155,
+     672,   674,   154,    35,   210,   210,   256,   257,    40,   210,
+     683,   678,   165,   208,   256,   257,   120,    73,    18,     3,
+     208,     5,     6,   155,     3,   210,     5,   277,   701,   481,
+     206,   208,   102,   209,   216,   217,   286,   216,   217,   195,
+       3,   238,     5,   216,   217,   264,     3,   151,     5,   216,
+     217,   449,   209,   128,   264,   211,   206,   212,    10,   209,
+     164,   205,   206,   195,     3,   306,   299,     3,   309,     5,
+     311,   312,   128,   503,   526,   316,   222,   223,   187,   211,
+     155,   210,     3,   586,     5,   587,   190,   210,   208,   193,
+     194,   195,   210,   210,   198,   199,   210,   208,   331,   155,
+     208,   351,   210,   207,   556,   210,   208,   211,   210,   351,
+     208,   195,   196,   197,     3,   211,     5,   299,   211,   549,
+     195,   205,   206,   356,   592,     3,   640,     5,     3,   211,
+       5,   206,     3,     3,     5,     5,   211,   211,   211,   195,
+     193,   194,   195,   196,   197,     3,     3,     5,     5,   651,
+     206,   210,   205,   206,   211,   211,   211,   671,   180,   181,
+     182,   183,   184,   210,   397,   212,   211,   211,   350,   683,
+     350,   350,   211,   211,   356,   211,   606,   350,   211,   206,
+     578,   611,   415,   350,   614,   211,   211,   701,   211,   208,
+     692,   211,   374,   193,   194,   195,   196,   197,   211,   449,
+     211,   211,   211,   211,   211,   205,   206,   449,   211,   211,
+     211,   210,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,   211,   211,   456,   211,   211,   211,   210,   694,   211,
+     480,   464,   208,   211,     5,    10,   213,   212,   187,   212,
+     211,   671,    10,    10,    10,    10,    10,    10,    10,    10,
+     206,   211,   485,   208,   187,   653,   210,   208,    16,    17,
+      18,   503,   495,    21,    22,   717,   210,   208,   205,   212,
+     208,   453,   185,   453,   453,   209,   458,   456,   213,   461,
+     453,   461,   461,   453,   453,   464,   453,   451,   461,   453,
+     453,   464,   453,   453,   461,   453,     7,   464,   212,    42,
+     212,   543,   212,   211,   185,   212,   212,   212,   212,   212,
+     543,   212,   485,   212,   288,   212,   212,   291,   212,   212,
+     212,   212,   212,    10,   298,   212,   212,   301,   578,   212,
+     212,   722,   723,   307,   308,   212,   578,   205,   212,   212,
+     212,   187,    85,   212,   571,   210,   209,    92,   212,   582,
+     185,   165,   212,   603,   210,    98,    99,   100,   101,   592,
+     210,   543,     3,     3,   606,   108,    10,   609,     7,   611,
+     212,   210,   185,   206,   210,   209,   609,     5,   187,   210,
+     354,   355,   186,   212,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   212,   212,   212,   208,   187,   187,
+     212,   205,   206,   653,   212,   148,   212,   212,   212,   152,
+     592,   653,   212,   646,   210,   343,   480,   391,   392,   393,
+     394,   395,   396,   397,   551,   460,   723,   609,   313,   671,
+     458,   307,   242,   191,   192,   193,   194,   195,   196,   197,
+      54,   303,   593,   696,   230,   678,     3,   205,   206,    85,
+       7,     8,     9,    10,    11,    12,   596,   594,    -1,    -1,
+     362,    -1,    -1,    -1,   646,    -1,    -1,    -1,    -1,    -1,
+     652,    -1,    -1,   652,   656,    -1,   656,   656,    -1,   652,
+      -1,    -1,    -1,   656,    -1,   652,    41,    -1,    -1,   656,
+      -1,    46,    -1,    -1,    -1,   469,   678,    -1,    -1,    -1,
+      -1,    -1,    -1,    16,    17,    18,    19,    20,    21,    22,
+      -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    73,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     504,   505,    -1,   507,   508,   509,   510,   511,   512,   513,
+     514,   515,   516,   517,   518,   519,   520,   521,   522,   523,
+       3,   525,     5,     6,     7,     8,     9,    10,    11,    12,
+       3,    -1,    -1,   120,     7,     8,     9,    10,    11,    12,
+      -1,    -1,    -1,   128,    -1,    -1,    -1,   551,    -1,    -1,
+      -1,    34,    -1,    36,    -1,    -1,    -1,    -1,    -1,    42,
+      -1,    -1,    -1,    46,   151,    -1,    -1,    -1,    -1,    -1,
+     155,    -1,    -1,    -1,    -1,    -1,    -1,   164,    -1,    62,
+      -1,    -1,    -1,    -1,    -1,    68,    69,    41,    71,    72,
+      -1,    -1,    75,    -1,    -1,    78,    -1,    -1,    -1,    72,
+      -1,    -1,    85,   190,    -1,    -1,   193,   194,   195,    -1,
+     195,   198,   199,    96,    -1,    98,    99,   100,   101,    73,
+     207,   206,    -1,    -1,   211,   108,   211,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   120,   191,   192,
+     193,   194,   195,   196,   197,    -1,    -1,    -1,    -1,   142,
+      -1,    -1,   205,   206,   147,   148,   149,    -1,   151,   152,
+      -1,   154,    -1,   677,   128,   158,   680,    -1,   151,    -1,
+      -1,   164,    -1,    -1,   167,    -1,   169,    -1,    -1,    -1,
+     694,   164,    -1,    -1,   177,   178,    -1,     4,     5,     6,
+      -1,   155,    -1,    -1,    -1,    -1,    -1,   190,    -1,    -1,
+     193,   194,   195,    -1,    -1,   198,   199,   190,    -1,    -1,
+     193,   194,   195,    -1,    -1,   198,   199,    34,   211,    36,
+      -1,    -1,    -1,    -1,    -1,    42,    43,    -1,   211,    46,
+      -1,   195,    -1,    -1,    51,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   206,    60,    -1,    62,    -1,   211,    -1,    -1,
+      -1,    68,    69,    -1,    71,    -1,    -1,    -1,    75,    -1,
+      -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    85,    -1,
+      -1,    -1,    -1,    -1,    -1,    92,    93,    -1,    -1,    96,
+      -1,    98,    99,   100,   101,   102,    -1,    -1,    -1,    -1,
+      -1,   108,    -1,    -1,    -1,    -1,   113,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     4,     5,     6,    -1,
+      -1,    -1,    -1,   130,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,
+     147,   148,   149,    -1,    -1,   152,    34,   154,    36,    -1,
+      -1,   158,    -1,    -1,    42,    43,    -1,    -1,    46,    -1,
+     167,    -1,   169,    51,    -1,    -1,    -1,    -1,    -1,    -1,
+     177,   178,    60,    -1,    62,    -1,    -1,    -1,    -1,    -1,
+      68,    69,    -1,    71,    -1,    -1,    -1,    75,    -1,    -1,
+      78,    -1,    -1,    -1,    -1,    -1,    -1,    85,    -1,   206,
+      -1,    -1,   209,    -1,    92,    93,    -1,    -1,    96,    -1,
+      98,    99,   100,   101,   102,    -1,    -1,    -1,    -1,    -1,
+     108,    -1,    -1,    -1,    -1,   113,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     4,     5,     6,    -1,    -1,
+      -1,    -1,   130,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,   147,
+     148,   149,    -1,    -1,   152,    34,   154,    36,    -1,    -1,
+     158,    -1,    -1,    42,    43,    -1,    -1,    46,    -1,   167,
+      -1,   169,    51,    -1,    -1,    -1,    -1,    -1,    -1,   177,
+     178,    60,    -1,    62,    -1,    -1,    -1,    -1,    -1,    68,
+      69,    -1,    71,    -1,    -1,    -1,    75,    -1,    -1,    78,
+      -1,    -1,    -1,    -1,    -1,    -1,    85,    -1,   206,    -1,
+      -1,   209,    -1,    92,    -1,    -1,    -1,    96,    -1,    98,
+      99,   100,   101,   102,    -1,    -1,    -1,    -1,    -1,   108,
+      -1,    -1,    -1,    -1,   113,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,     4,     5,     6,    -1,    -1,    -1,
+      -1,   130,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,   147,   148,
+     149,    -1,    -1,   152,    34,   154,    36,    -1,    -1,   158,
+      -1,    -1,    42,    -1,    -1,    -1,    46,    -1,   167,    -1,
+     169,    51,    -1,    -1,    -1,    -1,    -1,    -1,   177,   178,
+      -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,    68,    69,
+      -1,    71,    -1,    -1,    -1,    75,    -1,    -1,    78,    -1,
+      -1,    -1,    -1,    -1,    -1,    85,    -1,   206,    -1,    -1,
+     209,    -1,    92,    -1,    -1,    -1,    96,    -1,    98,    99,
+     100,   101,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,     4,     5,     6,    -1,    -1,    -1,    -1,
+     130,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   142,    -1,    -1,    -1,    -1,   147,   148,   149,
+      -1,    -1,   152,    34,   154,    36,    -1,    -1,   158,    -1,
+      -1,    42,    -1,    -1,    -1,    46,    -1,   167,    -1,   169,
+      51,    -1,    -1,    -1,    -1,    -1,    -1,   177,   178,    -1,
+      -1,    62,    -1,    -1,    -1,    -1,    -1,    68,    69,    -1,
+      71,    -1,    -1,    -1,    75,    -1,    -1,    78,    -1,    -1,
+      -1,    -1,    -1,    -1,    85,    -1,   206,    -1,    -1,   209,
+      -1,    92,    -1,    -1,    -1,    96,    -1,    98,    99,   100,
+     101,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     4,     5,     6,    -1,    -1,    -1,    -1,   130,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    -1,
+      -1,   142,    -1,    -1,    -1,    -1,   147,   148,   149,    -1,
+      -1,   152,    34,   154,    36,    -1,    -1,   158,    -1,    -1,
+      42,    -1,    -1,    -1,    46,    -1,   167,    -1,   169,    51,
+      -1,    -1,    -1,    -1,    -1,    -1,   177,   178,    -1,    -1,
+      62,    -1,    -1,    -1,    -1,    -1,    68,    69,    -1,    71,
+      -1,    -1,    -1,    75,    -1,    -1,    78,    -1,     5,     6,
+      -1,    -1,    -1,    85,    -1,   206,    -1,    -1,   209,    -1,
+      92,    -1,    -1,    -1,    96,    -1,    98,    99,   100,   101,
+      -1,    -1,    -1,    -1,    -1,    -1,   108,    34,    -1,    36,
+      -1,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,    46,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   130,    -1,
+      -1,    -1,    -1,    -1,    -1,    62,    -1,    -1,    -1,    -1,
+     142,    68,    69,    -1,    71,   147,   148,   149,    75,    -1,
+     152,    78,   154,    -1,    -1,    -1,   158,    -1,    85,    -1,
+      -1,    -1,    -1,    -1,    -1,   167,    -1,   169,    -1,    96,
+      -1,    98,    99,   100,   101,   177,   178,    -1,    -1,    -1,
+     186,   108,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   205,
+     206,    -1,    -1,    -1,   206,    -1,   212,   209,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,
+     147,   148,   149,    -1,    -1,   152,    -1,   154,     4,     5,
+       6,   158,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    15,
+     167,    -1,   169,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     177,   178,    -1,    -1,    -1,    -1,    -1,    -1,    34,    -1,
+      36,    -1,    -1,    -1,    -1,    -1,    42,    43,    -1,    -1,
+      46,    -1,    -1,    -1,    -1,    51,    -1,    -1,    -1,   206,
+      -1,    -1,   209,    -1,    60,    -1,    62,    -1,    -1,    -1,
+      -1,    -1,    68,    69,    -1,    71,    -1,    -1,    -1,    75,
+      -1,    -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    85,
+      -1,    -1,    -1,    -1,    -1,    -1,    92,    -1,    -1,    -1,
+      96,    -1,    98,    99,   100,   101,   102,    -1,    -1,    -1,
+      -1,    -1,   108,    -1,    -1,    -1,    -1,   113,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   130,    -1,    -1,    -1,     4,     5,
+       6,    -1,    -1,    -1,    -1,    -1,   142,    -1,    14,    -1,
+      -1,   147,   148,   149,    -1,    -1,   152,    -1,   154,    -1,
+      -1,    -1,   158,    -1,    -1,    -1,    -1,    -1,    34,   165,
+      36,   167,    -1,   169,    -1,    -1,    42,    43,    -1,    -1,
+      46,   177,   178,    -1,    -1,    51,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,
+      -1,    -1,    68,    69,    -1,    71,    -1,    -1,    -1,    75,
+     206,    -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    85,
+      -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    -1,    -1,
+      96,    -1,    98,    99,   100,   101,   102,    -1,    -1,    -1,
+      -1,    -1,   108,    -1,    -1,    -1,    -1,   113,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,
+      -1,    -1,    -1,    -1,   130,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,
+      -1,   147,   148,   149,    -1,    -1,   152,    34,   154,    36,
+      -1,    -1,   158,    -1,    41,    42,    -1,    -1,    -1,    46,
+      -1,   167,    -1,   169,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   177,   178,    -1,    -1,    62,    -1,    -1,    -1,    -1,
+      -1,    68,    69,    -1,    71,    -1,    73,    -1,    75,    -1,
+      -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    85,    -1,
+     206,    -1,    -1,    -1,    -1,    -1,     5,     6,    -1,    96,
+      -1,    98,    99,   100,   101,    -1,    -1,    -1,    -1,    -1,
+      -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    34,    -1,    36,    -1,    -1,
+      -1,   128,    41,    42,    -1,    -1,    -1,    46,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,
+     147,   148,   149,    62,    -1,   152,    -1,   154,   155,    68,
+      69,   158,    71,    -1,    73,    -1,    75,    -1,    -1,    78,
+     167,    -1,   169,    -1,    -1,    -1,    85,    -1,    -1,    -1,
+     177,   178,    -1,    -1,     5,     6,    -1,    96,    -1,    98,
+      99,   100,   101,    -1,    -1,    -1,    -1,    -1,   195,   108,
+      -1,    -1,    -1,    -1,    25,    -1,    -1,    -1,    -1,   206,
+      -1,    -1,    -1,    34,    -1,    36,    -1,    -1,    -1,   128,
+      -1,    42,    -1,    -1,    -1,    46,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,   147,   148,
+     149,    62,    -1,   152,    -1,   154,   155,    68,    69,   158,
+      71,    -1,    -1,    -1,    75,    -1,    -1,    78,   167,    -1,
+     169,    -1,    -1,    -1,    85,    -1,    -1,    -1,   177,   178,
+      -1,    -1,     5,     6,    -1,    96,    -1,    98,    99,   100,
+     101,    -1,    -1,    -1,    -1,    -1,   195,   108,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,   206,    -1,    -1,
+      -1,    34,    -1,    36,    -1,    -1,    -1,    -1,    -1,    42,
+      -1,    -1,    -1,    46,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   142,    -1,    -1,    -1,    -1,   147,   148,   149,    62,
+      -1,   152,    -1,   154,    -1,    68,    69,   158,    71,    -1,
+      -1,    -1,    75,    -1,    -1,    78,   167,    -1,   169,    -1,
+      -1,    -1,    85,    -1,    -1,    -1,   177,   178,    -1,    -1,
+      -1,    -1,    -1,    96,    -1,    98,    99,   100,   101,    -1,
+      -1,    -1,    -1,    -1,    -1,   108,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,   206,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    -1,    -1,   142,
+      -1,    -1,    -1,    -1,   147,   148,   149,    -1,    -1,   152,
+      -1,   154,    -1,    -1,    -1,   158,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   167,    -1,   169,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   177,   178,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    -1,    -1,    -1,   186,    -1,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+      -1,    -1,    -1,   206,    -1,    -1,    -1,   205,   206,    -1,
+      -1,    -1,    -1,    -1,   212,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    16,    17,    18,    19,    20,    21,
+      22,    -1,    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    16,    17,    18,    19,    20,    21,    22,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   186,    -1,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,    16,    17,
+      18,    19,    20,    21,    22,   205,   206,   207,   186,    -1,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+      16,    17,    18,    19,    20,    21,    22,   205,   206,   207,
       -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,     4,     5,    -1,    -1,    -1,
-     150,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    33,    -1,    35,    -1,    -1,    -1,
-      -1,    -1,    41,    42,    -1,    -1,    45,    -1,    -1,   189,
-      -1,    50,   192,   193,   194,    -1,    -1,   197,   198,    -1,
-      59,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    68,
-     210,    70,    -1,    -1,    -1,    74,    -1,    -1,    77,    -1,
-      -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    -1,    -1,
-      -1,    -1,    91,    92,    -1,    -1,    95,    -1,    97,    98,
-      99,   100,   101,    -1,    -1,    -1,    -1,    -1,   107,    -1,
-      -1,    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     4,     5,    -1,    -1,    -1,    -1,
-     129,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   141,    -1,    -1,    -1,    -1,   146,   147,   148,
-      -1,    -1,   151,    33,   153,    35,    -1,    -1,   157,    -1,
-      -1,    41,    42,    -1,    -1,    45,    -1,   166,    -1,   168,
-      50,    -1,    -1,    -1,    -1,    -1,    -1,   176,   177,    59,
-      -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    68,    -1,
-      70,    -1,    -1,    -1,    74,    -1,    -1,    77,    -1,    -1,
-      -1,    -1,    -1,    -1,    84,    -1,   205,    -1,    -1,   208,
-      -1,    91,    92,    -1,    -1,    95,    -1,    97,    98,    99,
-     100,   101,    -1,    -1,    -1,    -1,    -1,   107,    -1,    -1,
-      -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     4,     5,    -1,    -1,    -1,    -1,   129,
+      -1,    -1,    -1,    -1,    -1,    -1,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   205,   206,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   141,    -1,    -1,    -1,    -1,   146,   147,   148,    -1,
-      -1,   151,    33,   153,    35,    -1,    -1,   157,    -1,    -1,
-      41,    42,    -1,    -1,    45,    -1,   166,    -1,   168,    50,
-      -1,    -1,    -1,    -1,    -1,    -1,   176,   177,    59,    -1,
-      61,    -1,    -1,    -1,    -1,    -1,    67,    68,    -1,    70,
-      -1,    -1,    -1,    74,    -1,    -1,    77,    -1,    -1,    -1,
-      -1,    -1,    -1,    84,    -1,   205,    -1,    -1,   208,    -1,
-      91,    -1,    -1,    -1,    95,    -1,    97,    98,    99,   100,
-     101,    -1,    -1,    -1,    -1,    -1,   107,     4,     5,    -1,
-      -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   129,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    33,    -1,    35,    -1,
-     141,    -1,    -1,    -1,    41,   146,   147,   148,    45,    -1,
-     151,    -1,   153,    50,    -1,    -1,   157,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    61,   166,    -1,   168,    -1,    -1,
-      67,    68,    -1,    70,    -1,   176,   177,    74,    -1,    -1,
-      77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    91,    -1,    -1,    -1,    95,    -1,
-      97,    98,    99,   100,   205,    -1,    -1,   208,    -1,    -1,
-     107,     4,     5,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   186,    -1,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   205,   206,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   205,   206,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   205,   206,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   129,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      33,    -1,    35,    -1,   141,    -1,    -1,    -1,    41,   146,
-     147,   148,    45,    -1,   151,    -1,   153,    50,    -1,    -1,
-     157,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    61,   166,
-      -1,   168,    -1,    -1,    67,    68,    -1,    70,    -1,   176,
-     177,    74,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,
-      -1,    84,    -1,    -1,    -1,    -1,    -1,    -1,    91,    -1,
-      -1,    -1,    95,    -1,    97,    98,    99,   100,   205,    -1,
-      -1,   208,    -1,    -1,   107,     4,     5,    -1,    -1,    -1,
-      -1,    -1,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    -1,    -1,   129,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    33,    -1,    35,    -1,   141,    -1,
-      -1,    -1,    41,   146,   147,   148,    45,    -1,   151,    -1,
-     153,    50,    -1,    -1,   157,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    61,   166,    -1,   168,    -1,    -1,    67,    68,
-      -1,    70,    -1,   176,   177,    74,    -1,    -1,    77,    -1,
-      -1,     5,    -1,    -1,    -1,    84,    -1,    -1,    -1,    -1,
-      -1,    -1,    91,    -1,    -1,    -1,    95,    -1,    97,    98,
-      99,   100,   205,    -1,    -1,   208,    -1,    -1,   107,    33,
-      -1,    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,
-      -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     129,    -1,    -1,    -1,    -1,    -1,    -1,    61,    -1,    -1,
-      -1,    -1,   141,    67,    68,    -1,    70,   146,   147,   148,
-      74,    -1,   151,    77,   153,    -1,    -1,    -1,   157,    -1,
-      84,    -1,    -1,    -1,    -1,    -1,    -1,   166,    -1,   168,
-      -1,    95,    -1,    97,    98,    99,   100,   176,   177,    -1,
-      -1,    -1,   185,   107,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   204,   205,    -1,    -1,    -1,   205,    -1,   211,   208,
-       4,     5,    -1,    -1,    -1,    -1,    -1,   141,    -1,    -1,
-      14,    -1,   146,   147,   148,    -1,    -1,   151,    -1,   153,
-      -1,    -1,    -1,   157,    -1,    -1,    -1,    -1,    -1,    33,
-      -1,    35,   166,    -1,   168,    -1,    -1,    41,    42,    -1,
-      -1,    45,   176,   177,    -1,    -1,    50,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    59,    -1,    61,    -1,    -1,
-      -1,    -1,    -1,    67,    68,    -1,    70,    -1,    -1,    -1,
-      74,   205,    -1,    77,   208,    -1,    -1,    -1,    -1,    -1,
-      84,    -1,    -1,    -1,    -1,    -1,    -1,    91,    -1,    -1,
-      -1,    95,    -1,    97,    98,    99,   100,   101,    -1,    -1,
-      -1,    -1,    -1,   107,    -1,    -1,    -1,    -1,   112,    -1,
+      -1,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+      -1,    -1,     5,     6,    -1,    -1,    -1,   205,   206,    -1,
+      -1,    -1,    -1,    -1,   190,   191,   192,   193,   194,   195,
+     196,   197,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   205,
+     206,    34,    -1,    36,    -1,    -1,    -1,    -1,    -1,    42,
+      43,    -1,    -1,    46,    -1,    -1,    -1,     5,     6,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,    62,
+      -1,    -1,    -1,    -1,    -1,    68,    69,    -1,    71,    -1,
+      -1,    -1,    75,    -1,    -1,    78,    34,    -1,    36,    -1,
+      -1,    -1,    85,    -1,    42,    -1,    -1,    -1,    46,    -1,
+      -1,    -1,    -1,    96,    -1,    98,    99,   100,   101,   102,
+      -1,    -1,   105,    -1,    62,   108,    -1,    -1,    -1,   112,
+      68,    69,    -1,    71,    -1,    -1,    -1,    75,    -1,    -1,
+      78,    -1,    -1,    -1,    -1,    -1,    -1,    85,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    96,   142,
+      98,    99,   100,   101,   147,   148,   149,    -1,    -1,   152,
+     108,   154,    -1,    -1,    -1,   158,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   167,    -1,   169,    -1,     5,     6,
+      -1,    -1,    -1,    -1,   177,   178,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,   147,
+     148,   149,    -1,    -1,   152,    -1,   154,    34,    -1,    36,
+     158,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,   167,
+      -1,   169,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   177,
+     178,    -1,    -1,    -1,    -1,    62,    -1,    -1,    -1,    -1,
+      -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    75,    -1,
+      -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    85,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   129,    -1,    -1,    -1,    -1,
-       4,     5,    -1,    -1,    -1,    -1,    -1,   141,    -1,    13,
-      -1,    -1,   146,   147,   148,    -1,    -1,   151,    -1,   153,
-      -1,    -1,    -1,   157,    -1,    -1,    -1,    -1,    -1,    33,
-     164,    35,   166,    -1,   168,    -1,    -1,    41,    42,    -1,
-      -1,    45,   176,   177,    -1,    -1,    50,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    59,    -1,    61,    -1,    -1,
-      -1,    -1,    -1,    67,    68,    -1,    70,    -1,    -1,    -1,
-      74,   205,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
-      84,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    -1,
-      -1,    95,    -1,    97,    98,    99,   100,   101,     5,    -1,
-      -1,    -1,    -1,   107,    -1,    -1,    -1,    -1,   112,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   129,    33,    -1,    35,    -1,
-      -1,    -1,    -1,    40,    41,    -1,    -1,   141,    45,    -1,
-      -1,    -1,   146,   147,   148,    -1,    -1,   151,    -1,   153,
-      -1,    -1,    -1,   157,    61,    -1,    -1,    -1,    -1,    -1,
-      67,    68,   166,    70,   168,    72,    -1,    74,    -1,    -1,
-      77,    -1,   176,   177,    -1,    -1,    -1,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     5,    -1,    95,    -1,
-      97,    98,    99,   100,    -1,    -1,    -1,    -1,    -1,    -1,
-     107,   205,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    33,    -1,    35,    -1,    -1,    -1,
-     127,    40,    41,    -1,    -1,    -1,    45,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   141,    -1,    -1,    -1,    -1,   146,
-     147,   148,    61,    -1,   151,    -1,   153,   154,    67,    68,
-     157,    70,    -1,    72,    -1,    74,    -1,    -1,    77,   166,
-      -1,   168,    -1,    -1,    -1,    84,    -1,    -1,    -1,   176,
-     177,    -1,    -1,    -1,     5,    -1,    95,    -1,    97,    98,
-      99,   100,    -1,    -1,    -1,    -1,    -1,   194,   107,    -1,
-      -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,   205,    -1,
-      -1,    -1,    33,    -1,    35,    -1,    -1,    -1,   127,    -1,
-      41,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   141,    -1,    -1,    -1,    -1,   146,   147,   148,
-      61,    -1,   151,    -1,   153,   154,    67,    68,   157,    70,
-      -1,    -1,    -1,    74,    -1,    -1,    77,   166,    -1,   168,
-      -1,    -1,    -1,    84,    -1,    -1,    -1,   176,   177,    -1,
-      -1,    -1,     5,    -1,    95,    -1,    97,    98,    99,   100,
-      -1,    -1,    -1,    -1,    -1,   194,   107,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,   205,    -1,    -1,    -1,
-      33,    -1,    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,
-      -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     141,    -1,    -1,    -1,    -1,   146,   147,   148,    61,    -1,
-     151,    -1,   153,    -1,    67,    68,   157,    70,    -1,    -1,
-      -1,    74,    -1,    -1,    77,   166,    -1,   168,    -1,    -1,
-      -1,    84,    -1,    -1,    -1,   176,   177,    -1,    -1,    -1,
-      -1,    -1,    95,    -1,    97,    98,    99,   100,    -1,    -1,
-      -1,    -1,    -1,    -1,   107,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,   205,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    -1,    -1,   141,    -1,
-      -1,    -1,    -1,   146,   147,   148,    -1,    -1,   151,    -1,
-     153,    -1,    -1,    -1,   157,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   166,    -1,   168,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   176,   177,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    -1,    -1,    -1,   185,    -1,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,    -1,
-      -1,    -1,   205,    -1,    -1,    -1,   204,   205,    -1,    -1,
-      -1,    -1,    -1,   211,    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,    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,
-      -1,    -1,    -1,    -1,    -1,   185,    -1,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,    15,    16,    17,
-      18,    19,    20,    21,   204,   205,   206,   185,    -1,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,    15,
-      16,    17,    18,    19,    20,    21,   204,   205,   206,    -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,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   204,   205,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   185,    -1,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   204,   205,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   204,   205,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   204,   205,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,    -1,
-      -1,    -1,     5,    -1,    -1,    -1,   204,   205,    -1,    -1,
-      -1,    -1,    -1,   189,   190,   191,   192,   193,   194,   195,
-     196,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   204,   205,
-      33,    -1,    35,    -1,    -1,    -1,    -1,    -1,    41,    42,
-      -1,    -1,    45,    -1,    -1,    -1,    -1,     5,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    59,    -1,    61,    -1,
-      -1,    -1,    -1,    -1,    67,    68,    -1,    70,    -1,    -1,
-      -1,    74,    -1,    -1,    77,    33,    -1,    35,    -1,    -1,
-      -1,    84,    -1,    41,    -1,    -1,    -1,    45,    -1,    -1,
-      -1,    -1,    95,    -1,    97,    98,    99,   100,   101,    -1,
-      -1,   104,    -1,    61,   107,    -1,    -1,    -1,   111,    67,
-      68,    -1,    70,    -1,    -1,    -1,    74,    -1,    -1,    77,
-      -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,   141,    97,
-      98,    99,   100,   146,   147,   148,    -1,    -1,   151,   107,
-     153,     5,    -1,    -1,   157,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   166,    -1,   168,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   176,   177,    -1,    -1,    -1,    -1,    33,
-      -1,    35,    -1,   141,    -1,    -1,    -1,    41,   146,   147,
-     148,    -1,    -1,   151,    -1,   153,    -1,    -1,    -1,   157,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    61,   166,    -1,
-     168,    -1,    -1,    67,    68,    -1,    -1,    -1,   176,   177,
-      74,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
-      84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    97,    98,    99,   100,    -1,    -1,    -1,
-      -1,    -1,    -1,   107,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    98,    99,   100,   101,    -1,    -1,    -1,    -1,    -1,
+      -1,   108,    -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,   146,   147,   148,    -1,    -1,   151,    -1,    -1,
-      -1,    -1,    -1,   157,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   166,    -1,   168,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   176,   177,    25,    -1,    27,    28,    29,    30,
-      31,    32,    -1,    34,    -1,    -1,    37,    -1,    39,    -1,
-      -1,    -1,    43,    44,    -1,    46,    47,    48,    49,    -1,
-      51,    52,    53,    54,    55,    56,    57,    58,    -1,    60,
-      -1,    62,    63,    64,    65,    66,    -1,    -1,    69,    -1,
-      -1,    -1,    73,    -1,    75,    76,    -1,    78,    79,    80,
-      81,    82,    83,    -1,    85,    86,    87,    88,    89,    90,
-      -1,    -1,    93,    -1,    -1,    96,    -1,    -1,    -1,    -1,
-      -1,   102,   103,    -1,   105,   106,    -1,   108,   109,    -1,
-      -1,    -1,   113,   114,   115,   116,   117,   118,    -1,   120,
-     121,   122,   123,   124,   125,   126,    -1,   128,    -1,   130,
-      -1,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-      -1,   142,   143,   144,   145,    -1,    -1,    -1,   149,    -1,
-      -1,   152,    -1,    -1,   155,   156,    -1,    -1,   159,   160,
-     161,   162,    -1,    -1,   165,    -1,   167,    -1,   169,   170,
-     171,   172,   173,   174,   175,    -1,    -1,   178
+     147,   148,   149,    -1,    -1,   152,    -1,    -1,    -1,    -1,
+      -1,   158,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     167,    -1,   169,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     177,   178,    26,    -1,    28,    29,    30,    31,    32,    33,
+      -1,    35,    -1,    -1,    38,    -1,    40,    -1,    -1,    -1,
+      44,    45,    -1,    47,    48,    49,    50,    -1,    52,    53,
+      54,    55,    56,    57,    58,    59,    -1,    61,    -1,    63,
+      64,    65,    66,    67,    -1,    -1,    70,    -1,    -1,    -1,
+      74,    -1,    76,    77,    -1,    79,    80,    81,    82,    83,
+      84,    -1,    86,    87,    88,    89,    90,    91,    -1,    -1,
+      94,    -1,    -1,    97,    -1,    -1,    -1,    -1,    -1,   103,
+     104,    -1,   106,   107,    -1,   109,   110,    -1,    -1,    -1,
+     114,   115,   116,   117,   118,   119,    -1,   121,   122,   123,
+     124,   125,   126,   127,    -1,   129,    -1,   131,    -1,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,    -1,   143,
+     144,   145,   146,    -1,    -1,    -1,   150,    -1,    -1,   153,
+      -1,    -1,   156,   157,    -1,    -1,   160,   161,   162,   163,
+      -1,    -1,   166,    -1,   168,    -1,   170,   171,   172,   173,
+     174,   175,   176,    -1,    -1,   179
 };
 
-  /* YYSTOSSTATE-NUM -- The (internal number of the) accessing
+  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_int16 yystos[] =
 {
-       0,   214,   216,     0,     4,     5,    14,    33,    35,    41,
-      42,    45,    50,    59,    61,    67,    68,    70,    74,    77,
-      84,    91,    95,    97,    98,    99,   100,   101,   107,   112,
-     129,   141,   146,   147,   148,   151,   153,   157,   166,   168,
-     176,   177,   205,   215,   222,   223,   225,   226,   227,   228,
-     231,   232,   238,   239,   250,   264,   268,   270,   271,   272,
-     273,   274,   277,   278,   281,   283,   284,   285,   286,   288,
-     289,   290,   291,   292,   294,   296,   314,   315,   316,   317,
-     205,   319,   322,   323,     3,     5,   210,     3,     5,     3,
-       5,   266,    97,   269,     9,     3,     5,   269,     3,   210,
-     210,   269,   270,     3,   266,     3,   266,   270,    25,    27,
-      28,    29,    30,    31,    32,    34,    37,    39,    43,    44,
-      46,    47,    48,    49,    51,    52,    53,    54,    55,    56,
-      57,    58,    60,    62,    63,    64,    65,    66,    69,    73,
-      75,    76,    78,    79,    80,    81,    82,    83,    85,    86,
-      87,    88,    89,    90,    93,    96,   102,   103,   105,   106,
-     108,   109,   113,   114,   115,   116,   117,   118,   120,   121,
-     122,   123,   124,   125,   126,   128,   130,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   142,   143,   144,   145,
-     149,   152,   155,   156,   159,   160,   161,   162,   165,   167,
-     169,   170,   171,   172,   173,   174,   175,   178,   240,   242,
-     313,   209,   218,   218,   164,    67,   104,   111,   157,   166,
-     230,   250,   271,   277,   283,   287,   294,   314,   317,   209,
-     209,   207,   207,   209,   207,   209,   221,   209,   186,   282,
-     207,   295,   296,   295,   295,     3,     5,    40,    72,   127,
-     154,   194,   210,   244,   267,   297,   298,   311,   250,   314,
-     315,   317,   295,   209,    51,    64,    69,   324,   325,   319,
-     101,     9,   207,   209,     3,   315,   207,   158,   207,   210,
-     210,   210,   210,   210,   210,   210,   210,   210,   210,   210,
-     210,   210,   210,   210,   210,   210,   210,   210,   210,   210,
-     210,   210,   210,   210,   210,   210,   210,   210,   210,   210,
-     210,   210,   184,   206,    13,    92,   222,   229,   232,   271,
-     273,   274,   285,   286,   289,   208,   238,   239,     3,     3,
-       5,     3,     5,     3,     3,   207,   311,   275,   217,   131,
-     279,   283,     3,     5,   207,   220,   293,   297,   297,   212,
-     205,   210,   237,   295,   184,   206,     5,   211,   247,   248,
-     249,   267,   186,   211,   257,   210,   260,     9,     9,    12,
-     243,   267,     3,     6,     7,     8,     9,    10,    11,    71,
-     119,   150,   163,   189,   192,   193,   194,   197,   198,   210,
-     253,   254,   255,   253,   256,     9,     9,   241,   256,   255,
-       9,     9,   255,     9,   255,   253,   236,   239,   294,   255,
-     251,   252,   253,     9,   313,     9,   255,   315,   251,   253,
-     315,   179,   180,   181,   182,   183,   312,   315,   315,   243,
-       6,     7,   318,     9,   315,   242,   205,   210,   209,   207,
-     221,   294,   208,   238,   276,   216,   186,   110,   238,   262,
-     280,   209,   207,   220,   208,   222,   239,   292,   297,   211,
-     256,   194,   206,   253,   233,   234,   235,   236,   325,   207,
-     208,   184,   212,     6,   224,   208,   238,   258,   262,   208,
-     239,   259,   262,   211,   211,   211,   210,   253,   253,   253,
-     253,   253,   253,   253,   294,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,   185,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   204,   205,   184,   211,   211,
-     211,   184,   211,   211,   211,   211,   211,   211,   211,   211,
-     211,   211,   294,   194,   210,   237,   244,   267,   303,   305,
-     306,   211,   184,   211,   211,   211,   211,   184,   211,   211,
-     211,   211,   211,   211,   211,   211,   204,   211,   211,   211,
-     242,     9,   219,   297,   307,   221,   286,   208,   186,   294,
-     314,   209,   208,   239,   263,   264,   208,   228,   208,   221,
-     206,   206,   211,   184,   164,   320,   321,   249,   255,     6,
-     211,   294,   317,   211,   209,   209,   294,   211,   194,   210,
-     237,   244,   299,   301,   302,   253,   253,     3,   253,   253,
-     253,   253,   253,   253,   253,   253,   253,   253,   253,   253,
-     253,   253,   253,   253,   253,     3,   253,   255,     9,   305,
-     293,   194,   233,   244,   304,   305,   210,   237,   252,   255,
-       6,   211,   218,   184,   297,   209,   220,   221,    24,   236,
-     323,   208,   320,   303,   309,   310,   209,   265,   267,   301,
-     293,   194,   233,   244,   300,   301,   211,   210,   237,   186,
-     206,   305,   293,   211,   305,   211,   233,   211,   221,   208,
-     297,   208,     5,   186,   308,   184,   209,   207,   211,   301,
-     293,   211,   305,   211,   253,   233,   253,   305,   211,   221,
-     209,   256,   309,   245,   305,   211,    39,    52,   208,   246,
-     255,   186,   186,   209,   261,   262,   261,   209
+       0,   215,   217,     0,     4,     5,     6,    15,    34,    36,
+      42,    43,    46,    51,    60,    62,    68,    69,    71,    75,
+      78,    85,    92,    96,    98,    99,   100,   101,   102,   108,
+     113,   130,   142,   147,   148,   149,   152,   154,   158,   167,
+     169,   177,   178,   206,   216,   223,   224,   226,   227,   228,
+     229,   232,   233,   239,   240,   251,   265,   269,   271,   274,
+     276,   277,   278,   279,   282,   283,   286,   288,   289,   290,
+     291,   293,   294,   295,   296,   297,   299,   301,   319,   320,
+     321,   322,   205,   206,   324,   327,   328,     3,     5,   211,
+       3,     5,     3,     5,   267,    98,   270,    10,     3,     5,
+     270,     3,     6,   211,   211,   270,   271,     3,   267,     3,
+     267,   271,    26,    28,    29,    30,    31,    32,    33,    35,
+      38,    40,    44,    45,    47,    48,    49,    50,    52,    53,
+      54,    55,    56,    57,    58,    59,    61,    63,    64,    65,
+      66,    67,    70,    74,    76,    77,    79,    80,    81,    82,
+      83,    84,    86,    87,    88,    89,    90,    91,    94,    97,
+     103,   104,   106,   107,   109,   110,   114,   115,   116,   117,
+     118,   119,   121,   122,   123,   124,   125,   126,   127,   129,
+     131,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     143,   144,   145,   146,   150,   153,   156,   157,   160,   161,
+     162,   163,   166,   168,   170,   171,   172,   173,   174,   175,
+     176,   179,   241,   243,   318,   210,   219,   219,   165,    68,
+     105,   112,   158,   167,   231,   251,   276,   282,   288,   292,
+     299,   319,   322,   210,   210,   208,   208,   210,   208,   210,
+     222,   210,   187,   287,   208,   300,   301,   300,   300,     3,
+       5,    41,    73,   128,   155,   195,   211,   245,   268,   302,
+     303,   316,   251,   319,   320,   322,   300,   210,   275,    52,
+      65,    70,   329,   330,   324,   102,    10,   208,   210,     3,
+     320,   208,   159,   208,   211,   211,   211,   211,   211,   211,
+     211,   211,   211,   211,   211,   211,   211,   211,   211,   211,
+     211,   211,   211,   211,   211,   211,   211,   211,   211,   211,
+     211,   211,   211,   211,   211,   211,   211,   185,   207,    14,
+      93,   223,   230,   233,   276,   278,   279,   290,   291,   294,
+     209,   239,   240,     3,     3,     5,     3,     5,     3,     3,
+     208,   316,   280,   218,   132,   284,   288,     3,   274,   208,
+     221,   298,   302,   302,   213,   206,   211,   238,   300,     3,
+       5,   272,   185,   207,     5,   212,   248,   249,   250,   268,
+     187,   212,   258,   211,   261,    10,    10,    13,   244,   268,
+       3,     7,     8,     9,    10,    11,    12,    72,   120,   151,
+     164,   190,   193,   194,   195,   198,   199,   211,   254,   255,
+     256,   254,   257,    10,    10,   242,   257,   256,    10,    10,
+     256,    10,   256,   254,   237,   240,   299,   256,   252,   253,
+     254,    10,   318,    10,   256,   320,   252,   254,   320,   180,
+     181,   182,   183,   184,   317,   320,   320,   244,     7,     8,
+     323,    10,   320,   243,   206,   211,   210,   208,   222,   299,
+     209,   239,   281,   217,   187,   111,   239,   263,   285,   210,
+     208,   221,   209,   223,   240,   297,   302,   212,   257,   195,
+     207,   254,   234,   235,   236,   237,   205,   330,   208,   209,
+     185,   213,     7,   225,   209,   239,   259,   263,   209,   240,
+     260,   263,   212,   212,   212,   211,   254,   254,   254,   254,
+     254,   254,   254,   299,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,   186,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   205,   206,   185,   212,   212,   212,
+     185,   212,   212,   212,   212,   212,   212,   212,   212,   212,
+     212,   299,   195,   211,   238,   245,   268,   308,   310,   311,
+     212,   185,   212,   212,   212,   212,   185,   212,   212,   212,
+     212,   212,   212,   212,   212,   205,   212,   212,   212,   243,
+      10,   220,   302,   312,   222,   291,   209,   187,   299,   319,
+     210,   209,   240,   264,   265,   209,   229,   209,   222,   207,
+     207,   212,   185,   273,   165,   325,   326,   250,   256,     7,
+     212,   299,   322,   212,   210,   210,   299,   212,   195,   211,
+     238,   245,   304,   306,   307,   254,   254,     3,   254,   254,
+     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
+     254,   254,   254,   254,   254,     3,   254,   256,    10,   310,
+     298,   195,   234,   245,   309,   310,   211,   238,   253,   256,
+       7,   212,   219,   185,   302,   210,   221,   222,    25,   237,
+     272,   328,   209,   325,   308,   314,   315,   210,   266,   268,
+     306,   298,   195,   234,   245,   305,   306,   212,   211,   238,
+     187,   207,   310,   298,   212,   310,   212,   234,   212,   222,
+     209,   302,   209,     5,   187,   313,   185,   210,   208,   212,
+     306,   298,   212,   310,   212,   254,   234,   254,   310,   212,
+     222,   210,   257,   314,   246,   310,   212,    40,    53,   209,
+     247,   256,   187,   187,   210,   262,   263,   262,   210
 };
 
-  /* YYR1YYN -- Symbol number of symbol that rule YYN derives.  */
+  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_int16 yyr1[] =
 {
-       0,   213,   214,   215,   215,   216,   217,   216,   216,   216,
-     216,   216,   216,   216,   216,   218,   218,   219,   218,   218,
-     218,   218,   218,   218,   218,   218,   220,   220,   221,   221,
-     222,   222,   222,   222,   222,   222,   222,   223,   224,   224,
-     225,   225,   225,   225,   225,   225,   225,   225,   225,   226,
-     227,   228,   229,   230,   230,   231,   232,   233,   233,   234,
-     234,   235,   235,   236,   236,   237,   237,   237,   238,   238,
-     239,   240,   240,   240,   241,   241,   242,   242,   242,   242,
-     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
-     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
-     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
-     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
-     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
-     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
-     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
-     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
-     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
-     242,   242,   242,   242,   242,   242,   243,   243,   244,   244,
-     244,   244,   245,   245,   246,   246,   247,   247,   247,   248,
-     248,   249,   249,   250,   251,   251,   252,   252,   253,   253,
-     253,   253,   253,   253,   253,   253,   253,   253,   253,   253,
-     253,   253,   253,   253,   253,   253,   253,   253,   253,   253,
-     253,   253,   253,   253,   253,   253,   253,   253,   253,   253,
-     253,   253,   253,   253,   253,   253,   253,   253,   253,   254,
-     254,   255,   256,   257,   257,   258,   258,   259,   259,   260,
-     260,   261,   261,   262,   262,   263,   264,   264,   265,   265,
-     266,   266,   266,   267,   267,   268,   268,   268,   268,   268,
-     268,   268,   268,   268,   268,   268,   269,   269,   270,   270,
-     270,   270,   270,   270,   270,   270,   270,   271,   271,   272,
-     273,   274,   275,   275,   276,   277,   277,   278,   279,   279,
-     280,   280,   281,   281,   282,   282,   283,   283,   284,   285,
-     285,   285,   286,   286,   287,   287,   288,   289,   290,   290,
-     290,   291,   292,   293,   293,   294,   294,   295,   295,   296,
-     296,   296,   297,   297,   297,   298,   298,   298,   298,   299,
-     299,   299,   300,   300,   301,   301,   302,   302,   302,   302,
-     302,   303,   303,   303,   304,   304,   305,   305,   306,   306,
-     306,   306,   306,   306,   307,   307,   308,   308,   309,   310,
-     310,   311,   311,   312,   312,   312,   312,   312,   313,   313,
-     313,   314,   315,   315,   315,   315,   315,   315,   315,   315,
-     315,   315,   316,   317,   317,   318,   318,   318,   319,   319,
-     320,   320,   321,   322,   323,   323,   324,   324,   325,   325,
-     325
+       0,   214,   215,   216,   216,   217,   218,   217,   217,   217,
+     217,   217,   217,   217,   217,   219,   219,   220,   219,   219,
+     219,   219,   219,   219,   219,   219,   221,   221,   222,   222,
+     223,   223,   223,   223,   223,   223,   223,   224,   225,   225,
+     226,   226,   226,   226,   226,   226,   226,   226,   226,   227,
+     228,   229,   230,   231,   231,   232,   233,   234,   234,   235,
+     235,   236,   236,   237,   237,   238,   238,   238,   239,   239,
+     240,   241,   241,   241,   242,   242,   243,   243,   243,   243,
+     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
+     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
+     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
+     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
+     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
+     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
+     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
+     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
+     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
+     243,   243,   243,   243,   243,   243,   244,   244,   245,   245,
+     245,   245,   246,   246,   247,   247,   248,   248,   248,   249,
+     249,   250,   250,   251,   252,   252,   253,   253,   254,   254,
+     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
+     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
+     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
+     254,   254,   254,   254,   254,   254,   254,   254,   254,   255,
+     255,   256,   257,   258,   258,   259,   259,   260,   260,   261,
+     261,   262,   262,   263,   263,   264,   265,   265,   266,   266,
+     267,   267,   267,   268,   268,   269,   269,   269,   269,   269,
+     269,   269,   269,   269,   269,   269,   270,   270,   271,   271,
+     271,   271,   271,   271,   271,   271,   271,   272,   273,   272,
+     274,   275,   274,   276,   276,   277,   278,   279,   279,   280,
+     280,   281,   282,   282,   283,   284,   284,   285,   285,   286,
+     286,   287,   287,   288,   288,   289,   290,   290,   290,   291,
+     291,   292,   292,   293,   294,   295,   295,   295,   296,   297,
+     298,   298,   299,   299,   300,   300,   301,   301,   301,   302,
+     302,   302,   303,   303,   303,   303,   304,   304,   304,   305,
+     305,   306,   306,   307,   307,   307,   307,   307,   308,   308,
+     308,   309,   309,   310,   310,   311,   311,   311,   311,   311,
+     311,   312,   312,   313,   313,   314,   315,   315,   316,   316,
+     317,   317,   317,   317,   317,   318,   318,   318,   319,   320,
+     320,   320,   320,   320,   320,   320,   320,   320,   320,   321,
+     322,   322,   323,   323,   323,   324,   324,   325,   325,   326,
+     327,   328,   328,   329,   329,   330,   330,   330
 };
 
-  /* YYR2YYN -- Number of symbols on the right hand side of rule YYN.  */
+  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
 static const yytype_int8 yyr2[] =
 {
        0,     2,     2,     0,     2,     0,     0,     6,     2,     2,
@@ -2334,20 +2380,20 @@
        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,     2,     2,
-       5,     2,     0,     2,     2,     2,     2,     2,     2,     3,
-       2,     3,     5,     5,     0,     2,     2,     2,     2,     6,
-       8,     2,     2,     2,     2,     2,     2,     5,     1,     1,
-       1,     1,     1,     0,     2,     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,     5,     1,     1,     1,     1,     2,     1,     2,     1,
-       2,     4,     5,     5,    10,     1,     3,     1,     0,     2,
-       0,     2,     4,     6,     0,     3,     1,     3,     1,     1,
-       1
+       1,     2,     2,     1,     1,     1,     1,     1,     0,     4,
+       1,     0,     4,     2,     2,     2,     5,     2,     2,     0,
+       2,     2,     2,     2,     2,     2,     3,     2,     3,     5,
+       5,     0,     2,     2,     2,     2,     6,     8,     2,     2,
+       2,     2,     2,     2,     5,     1,     1,     1,     1,     1,
+       0,     2,     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,     5,     1,
+       1,     1,     1,     2,     1,     2,     1,     2,     4,     5,
+       5,    10,     1,     3,     1,     0,     2,     0,     2,     4,
+       6,     0,     3,     1,     3,     1,     1,     1
 };
 
 
@@ -2826,7 +2872,7 @@
 }
 
 
-/* The lookahead symbol.  */
+/* Lookahead token kind.  */
 int yychar;
 
 /* The semantic value of the lookahead symbol.  */
@@ -2844,34 +2890,30 @@
 int
 yyparse (void)
 {
-    yy_state_fast_t yystate;
+    yy_state_fast_t yystate = 0;
     /* Number of tokens to shift before error messages enabled.  */
-    int yyerrstatus;
+    int yyerrstatus = 0;
 
-    /* The stacks and their tools:
-       'yyss': related to states.
-       'yyvs': related to semantic values.
-
-       Refer to the stacks through separate pointers, to allow yyoverflow
+    /* Refer to the stacks through separate pointers, to allow yyoverflow
        to reallocate them elsewhere.  */
 
     /* Their size.  */
-    YYPTRDIFF_T yystacksize;
+    YYPTRDIFF_T yystacksize = YYINITDEPTH;
 
-    /* The state stack.  */
+    /* The state stack: array, bottom, top.  */
     yy_state_t yyssa[YYINITDEPTH];
-    yy_state_t *yyss;
-    yy_state_t *yyssp;
+    yy_state_t *yyss = yyssa;
+    yy_state_t *yyssp = yyss;
 
-    /* The semantic value stack.  */
+    /* The semantic value stack: array, bottom, top.  */
     YYSTYPE yyvsa[YYINITDEPTH];
-    YYSTYPE *yyvs;
-    YYSTYPE *yyvsp;
+    YYSTYPE *yyvs = yyvsa;
+    YYSTYPE *yyvsp = yyvs;
 
   int yyn;
   /* The return value of yyparse.  */
   int yyresult;
-  /* Lookahead token as an internal (translated) token number.  */
+  /* Lookahead symbol kind.  */
   yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
   /* The variables used to return semantic value and location from the
      action routines.  */
@@ -2888,15 +2930,6 @@
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
-  yynerrs = 0;
-  yystate = 0;
-  yyerrstatus = 0;
-
-  yystacksize = YYINITDEPTH;
-  yyssp = yyss = yyssa;
-  yyvsp = yyvs = yyvsa;
-
-
   YYDPRINTF ((stderr, "Starting parse\n"));
 
   yychar = YYEMPTY; /* Cause a token to be read.  */
@@ -3097,8 +3130,8 @@
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-  case 2:
-#line 315 "parser.y"
+  case 2: /* input: gbl_statements m_acf  */
+#line 318 "parser.y"
                                                 { check_statements((yyvsp[-1].stmt_list), FALSE);
 						  check_all_user_types((yyvsp[-1].stmt_list));
 						  write_header((yyvsp[-1].stmt_list));
@@ -3111,197 +3144,197 @@
 						  write_dlldata((yyvsp[-1].stmt_list));
 						  write_local_stubs((yyvsp[-1].stmt_list));
 						}
-#line 3115 "parser.tab.c"
+#line 3148 "parser.tab.c"
     break;
 
-  case 5:
-#line 331 "parser.y"
-                                                { (yyval.stmt_list) = NULL; }
-#line 3121 "parser.tab.c"
-    break;
-
-  case 6:
-#line 332 "parser.y"
-                                          { push_namespace((yyvsp[-1].str)); }
-#line 3127 "parser.tab.c"
-    break;
-
-  case 7:
-#line 333 "parser.y"
-                                                { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
-#line 3133 "parser.tab.c"
-    break;
-
-  case 8:
+  case 5: /* gbl_statements: %empty  */
 #line 334 "parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_reference((yyvsp[0].type))); }
-#line 3139 "parser.tab.c"
+                                                { (yyval.stmt_list) = NULL; }
+#line 3154 "parser.tab.c"
     break;
 
-  case 9:
+  case 6: /* $@1: %empty  */
 #line 335 "parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
-#line 3145 "parser.tab.c"
+                                          { push_namespace((yyvsp[-1].str)); }
+#line 3160 "parser.tab.c"
     break;
 
-  case 10:
+  case 7: /* gbl_statements: gbl_statements namespacedef '{' $@1 gbl_statements '}'  */
 #line 336 "parser.y"
+                                                { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
+#line 3166 "parser.tab.c"
+    break;
+
+  case 8: /* gbl_statements: gbl_statements interfacedec  */
+#line 337 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_reference((yyvsp[0].type))); }
+#line 3172 "parser.tab.c"
+    break;
+
+  case 9: /* gbl_statements: gbl_statements interfacedef  */
+#line 338 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
+#line 3178 "parser.tab.c"
+    break;
+
+  case 10: /* gbl_statements: gbl_statements coclass ';'  */
+#line 339 "parser.y"
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list);
 						  reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0);
 						}
-#line 3153 "parser.tab.c"
+#line 3186 "parser.tab.c"
     break;
 
-  case 11:
-#line 339 "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 3161 "parser.tab.c"
-    break;
-
-  case 12:
+  case 11: /* gbl_statements: gbl_statements coclassdef  */
 #line 342 "parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
-#line 3167 "parser.tab.c"
-    break;
-
-  case 13:
-#line 343 "parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
-#line 3173 "parser.tab.c"
-    break;
-
-  case 14:
-#line 344 "parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
-#line 3179 "parser.tab.c"
-    break;
-
-  case 15:
-#line 347 "parser.y"
-                                                { (yyval.stmt_list) = NULL; }
-#line 3185 "parser.tab.c"
-    break;
-
-  case 16:
-#line 348 "parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_reference((yyvsp[0].type))); }
-#line 3191 "parser.tab.c"
-    break;
-
-  case 17:
-#line 349 "parser.y"
-                                          { push_namespace((yyvsp[-1].str)); }
-#line 3197 "parser.tab.c"
-    break;
-
-  case 18:
-#line 350 "parser.y"
-                                                { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
-#line 3203 "parser.tab.c"
-    break;
-
-  case 19:
-#line 351 "parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
-#line 3209 "parser.tab.c"
-    break;
-
-  case 20:
-#line 352 "parser.y"
-                                                { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3215 "parser.tab.c"
-    break;
-
-  case 21:
-#line 353 "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 3223 "parser.tab.c"
+#line 3194 "parser.tab.c"
     break;
 
-  case 22:
-#line 356 "parser.y"
+  case 12: /* gbl_statements: gbl_statements moduledef  */
+#line 345 "parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
-#line 3229 "parser.tab.c"
+#line 3200 "parser.tab.c"
     break;
 
-  case 23:
-#line 357 "parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
-#line 3235 "parser.tab.c"
-    break;
-
-  case 24:
-#line 358 "parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_importlib((yyvsp[0].str))); }
-#line 3241 "parser.tab.c"
-    break;
-
-  case 25:
-#line 359 "parser.y"
+  case 13: /* gbl_statements: gbl_statements librarydef  */
+#line 346 "parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
-#line 3247 "parser.tab.c"
+#line 3206 "parser.tab.c"
     break;
 
-  case 26:
-#line 362 "parser.y"
-                                                { (yyval.stmt_list) = NULL; }
-#line 3253 "parser.tab.c"
-    break;
-
-  case 27:
-#line 363 "parser.y"
+  case 14: /* gbl_statements: gbl_statements statement  */
+#line 347 "parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
-#line 3259 "parser.tab.c"
+#line 3212 "parser.tab.c"
     break;
 
-  case 30:
-#line 371 "parser.y"
-                                                { (yyval.statement) = make_statement_cppquote((yyvsp[0].str)); }
-#line 3265 "parser.tab.c"
+  case 15: /* imp_statements: %empty  */
+#line 350 "parser.y"
+                                                { (yyval.stmt_list) = NULL; }
+#line 3218 "parser.tab.c"
     break;
 
-  case 31:
-#line 372 "parser.y"
-                                                { (yyval.statement) = make_statement_type_decl((yyvsp[-1].type)); }
-#line 3271 "parser.tab.c"
+  case 16: /* imp_statements: imp_statements interfacedec  */
+#line 351 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_reference((yyvsp[0].type))); }
+#line 3224 "parser.tab.c"
     break;
 
-  case 32:
-#line 373 "parser.y"
-                                                { (yyval.statement) = make_statement_declaration((yyvsp[-1].var)); }
-#line 3277 "parser.tab.c"
+  case 17: /* $@2: %empty  */
+#line 352 "parser.y"
+                                          { push_namespace((yyvsp[-1].str)); }
+#line 3230 "parser.tab.c"
     break;
 
-  case 33:
+  case 18: /* imp_statements: imp_statements namespacedef '{' $@2 imp_statements '}'  */
+#line 353 "parser.y"
+                                                { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
+#line 3236 "parser.tab.c"
+    break;
+
+  case 19: /* imp_statements: imp_statements interfacedef  */
+#line 354 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
+#line 3242 "parser.tab.c"
+    break;
+
+  case 20: /* imp_statements: imp_statements coclass ';'  */
+#line 355 "parser.y"
+                                                { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
+#line 3248 "parser.tab.c"
+    break;
+
+  case 21: /* imp_statements: imp_statements coclassdef  */
+#line 356 "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 3256 "parser.tab.c"
+    break;
+
+  case 22: /* imp_statements: imp_statements moduledef  */
+#line 359 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
+#line 3262 "parser.tab.c"
+    break;
+
+  case 23: /* imp_statements: imp_statements statement  */
+#line 360 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
+#line 3268 "parser.tab.c"
+    break;
+
+  case 24: /* imp_statements: imp_statements importlib  */
+#line 361 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_importlib((yyvsp[0].str))); }
+#line 3274 "parser.tab.c"
+    break;
+
+  case 25: /* imp_statements: imp_statements librarydef  */
+#line 362 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
+#line 3280 "parser.tab.c"
+    break;
+
+  case 26: /* int_statements: %empty  */
+#line 365 "parser.y"
+                                                { (yyval.stmt_list) = NULL; }
+#line 3286 "parser.tab.c"
+    break;
+
+  case 27: /* int_statements: int_statements statement  */
+#line 366 "parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
+#line 3292 "parser.tab.c"
+    break;
+
+  case 30: /* statement: cppquote  */
 #line 374 "parser.y"
-                                                { (yyval.statement) = make_statement_import((yyvsp[0].str)); }
-#line 3283 "parser.tab.c"
+                                                { (yyval.statement) = make_statement_cppquote((yyvsp[0].str)); }
+#line 3298 "parser.tab.c"
     break;
 
-  case 34:
+  case 31: /* statement: typedecl ';'  */
 #line 375 "parser.y"
-                                                { (yyval.statement) = (yyvsp[-1].statement); }
-#line 3289 "parser.tab.c"
+                                                { (yyval.statement) = make_statement_type_decl((yyvsp[-1].type)); }
+#line 3304 "parser.tab.c"
     break;
 
-  case 35:
+  case 32: /* statement: declaration ';'  */
 #line 376 "parser.y"
-                                                { (yyval.statement) = make_statement_pragma((yyvsp[0].str)); }
-#line 3295 "parser.tab.c"
+                                                { (yyval.statement) = make_statement_declaration((yyvsp[-1].var)); }
+#line 3310 "parser.tab.c"
     break;
 
-  case 36:
+  case 33: /* statement: import  */
 #line 377 "parser.y"
-                         { (yyval.statement) = NULL; }
-#line 3301 "parser.tab.c"
+                                                { (yyval.statement) = make_statement_import((yyvsp[0].str)); }
+#line 3316 "parser.tab.c"
     break;
 
-  case 37:
-#line 381 "parser.y"
+  case 34: /* statement: typedef ';'  */
+#line 378 "parser.y"
+                                                { (yyval.statement) = (yyvsp[-1].statement); }
+#line 3322 "parser.tab.c"
+    break;
+
+  case 35: /* statement: aPRAGMA  */
+#line 379 "parser.y"
+                                                { (yyval.statement) = make_statement_pragma((yyvsp[0].str)); }
+#line 3328 "parser.tab.c"
+    break;
+
+  case 36: /* statement: pragma_warning  */
+#line 380 "parser.y"
+                         { (yyval.statement) = NULL; }
+#line 3334 "parser.tab.c"
+    break;
+
+  case 37: /* pragma_warning: tPRAGMA_WARNING '(' aIDENTIFIER ':' warnings ')'  */
+#line 384 "parser.y"
                   {
                       int result;
                       (yyval.statement) = NULL;
@@ -3309,909 +3342,909 @@
                       if(!result)
                           error_loc("expected \"disable\" or \"enable\"\n");
                   }
-#line 3313 "parser.tab.c"
+#line 3346 "parser.tab.c"
     break;
 
-  case 38:
-#line 391 "parser.y"
+  case 38: /* warnings: aNUM  */
+#line 394 "parser.y"
                { (yyval.warning_list) = append_warning(NULL, (yyvsp[0].num)); }
-#line 3319 "parser.tab.c"
+#line 3352 "parser.tab.c"
     break;
 
-  case 39:
-#line 392 "parser.y"
+  case 39: /* warnings: warnings aNUM  */
+#line 395 "parser.y"
                         { (yyval.warning_list) = append_warning((yyvsp[-1].warning_list), (yyvsp[0].num)); }
-#line 3325 "parser.tab.c"
+#line 3358 "parser.tab.c"
     break;
 
-  case 41:
-#line 397 "parser.y"
+  case 41: /* typedecl: tENUM aIDENTIFIER  */
+#line 400 "parser.y"
                                                 { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 3331 "parser.tab.c"
+#line 3364 "parser.tab.c"
     break;
 
-  case 43:
-#line 399 "parser.y"
-                                                { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 3337 "parser.tab.c"
-    break;
-
-  case 45:
-#line 401 "parser.y"
-                                                { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
-#line 3343 "parser.tab.c"
-    break;
-
-  case 46:
+  case 43: /* typedecl: tSTRUCT aIDENTIFIER  */
 #line 402 "parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_enum_attrs((yyvsp[-1].attr_list)); }
-#line 3349 "parser.tab.c"
+                                                { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
+#line 3370 "parser.tab.c"
     break;
 
-  case 47:
-#line 403 "parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_struct_attrs((yyvsp[-1].attr_list)); }
-#line 3355 "parser.tab.c"
-    break;
-
-  case 48:
+  case 45: /* typedecl: tUNION aIDENTIFIER  */
 #line 404 "parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_union_attrs((yyvsp[-1].attr_list)); }
-#line 3361 "parser.tab.c"
+                                                { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
+#line 3376 "parser.tab.c"
     break;
 
-  case 49:
+  case 46: /* typedecl: attributes enumdef  */
+#line 405 "parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_enum_attrs((yyvsp[-1].attr_list)); }
+#line 3382 "parser.tab.c"
+    break;
+
+  case 47: /* typedecl: attributes structdef  */
+#line 406 "parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_struct_attrs((yyvsp[-1].attr_list)); }
+#line 3388 "parser.tab.c"
+    break;
+
+  case 48: /* typedecl: attributes uniondef  */
 #line 407 "parser.y"
-                                                { (yyval.str) = (yyvsp[-1].str); }
-#line 3367 "parser.tab.c"
+                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_union_attrs((yyvsp[-1].attr_list)); }
+#line 3394 "parser.tab.c"
     break;
 
-  case 50:
-#line 409 "parser.y"
+  case 49: /* cppquote: tCPPQUOTE '(' aSTRING ')'  */
+#line 410 "parser.y"
+                                                { (yyval.str) = (yyvsp[-1].str); }
+#line 3400 "parser.tab.c"
+    break;
+
+  case 50: /* import_start: tIMPORT aSTRING ';'  */
+#line 412 "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 3378 "parser.tab.c"
+#line 3411 "parser.tab.c"
     break;
 
-  case 51:
-#line 417 "parser.y"
+  case 51: /* import: import_start imp_statements aEOF  */
+#line 420 "parser.y"
                                                 { (yyval.str) = (yyvsp[-2].import)->name;
 						  if ((yyvsp[-2].import)->import_performed) pop_import();
 						  free((yyvsp[-2].import));
 						}
-#line 3387 "parser.tab.c"
+#line 3420 "parser.tab.c"
     break;
 
-  case 52:
-#line 424 "parser.y"
-                                                { (yyval.str) = (yyvsp[-2].str); if(!parse_only) add_importlib((yyvsp[-2].str), current_typelib); }
-#line 3393 "parser.tab.c"
-    break;
-
-  case 53:
+  case 52: /* importlib: tIMPORTLIB '(' aSTRING ')' semicolon_opt  */
 #line 427 "parser.y"
-                                                { (yyval.str) = (yyvsp[0].str); }
-#line 3399 "parser.tab.c"
+                                                { (yyval.str) = (yyvsp[-2].str); if(!parse_only) add_importlib((yyvsp[-2].str), current_typelib); }
+#line 3426 "parser.tab.c"
     break;
 
-  case 54:
-#line 428 "parser.y"
-                                                { (yyval.str) = (yyvsp[0].str); }
-#line 3405 "parser.tab.c"
-    break;
-
-  case 55:
+  case 53: /* libraryhdr: tLIBRARY aIDENTIFIER  */
 #line 430 "parser.y"
+                                                { (yyval.str) = (yyvsp[0].str); }
+#line 3432 "parser.tab.c"
+    break;
+
+  case 54: /* libraryhdr: tLIBRARY aKNOWNTYPE  */
+#line 431 "parser.y"
+                                                { (yyval.str) = (yyvsp[0].str); }
+#line 3438 "parser.tab.c"
+    break;
+
+  case 55: /* library_start: attributes libraryhdr '{'  */
+#line 433 "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 3413 "parser.tab.c"
+#line 3446 "parser.tab.c"
     break;
 
-  case 56:
-#line 435 "parser.y"
-                                                { (yyval.typelib) = (yyvsp[-3].typelib); (yyval.typelib)->stmts = (yyvsp[-2].stmt_list); }
-#line 3419 "parser.tab.c"
-    break;
-
-  case 57:
+  case 56: /* librarydef: library_start imp_statements '}' semicolon_opt  */
 #line 438 "parser.y"
+                                                { (yyval.typelib) = (yyvsp[-3].typelib); (yyval.typelib)->stmts = (yyvsp[-2].stmt_list); }
+#line 3452 "parser.tab.c"
+    break;
+
+  case 57: /* m_args: %empty  */
+#line 441 "parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 3425 "parser.tab.c"
+#line 3458 "parser.tab.c"
     break;
 
-  case 59:
-#line 442 "parser.y"
+  case 59: /* arg_list: arg  */
+#line 445 "parser.y"
                                                 { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( NULL, (yyvsp[0].var) ); }
-#line 3431 "parser.tab.c"
+#line 3464 "parser.tab.c"
     break;
 
-  case 60:
-#line 443 "parser.y"
+  case 60: /* arg_list: arg_list ',' arg  */
+#line 446 "parser.y"
                                                 { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) ); }
-#line 3437 "parser.tab.c"
+#line 3470 "parser.tab.c"
     break;
 
-  case 62:
-#line 447 "parser.y"
+  case 62: /* args: arg_list ',' ELLIPSIS  */
+#line 450 "parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-2].var_list), make_var(strdup("...")) ); }
-#line 3443 "parser.tab.c"
+#line 3476 "parser.tab.c"
     break;
 
-  case 63:
-#line 451 "parser.y"
+  case 63: /* arg: attributes decl_spec m_any_declarator  */
+#line 454 "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 3453 "parser.tab.c"
+#line 3486 "parser.tab.c"
     break;
 
-  case 64:
-#line 456 "parser.y"
+  case 64: /* arg: decl_spec m_any_declarator  */
+#line 459 "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 3463 "parser.tab.c"
+#line 3496 "parser.tab.c"
     break;
 
-  case 65:
-#line 463 "parser.y"
+  case 65: /* array: '[' expr ']'  */
+#line 466 "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 3472 "parser.tab.c"
+#line 3505 "parser.tab.c"
     break;
 
-  case 66:
-#line 467 "parser.y"
+  case 66: /* array: '[' '*' ']'  */
+#line 470 "parser.y"
                                                 { (yyval.expr) = make_expr(EXPR_VOID); }
-#line 3478 "parser.tab.c"
+#line 3511 "parser.tab.c"
     break;
 
-  case 67:
-#line 468 "parser.y"
-                                                { (yyval.expr) = make_expr(EXPR_VOID); }
-#line 3484 "parser.tab.c"
-    break;
-
-  case 68:
+  case 67: /* array: '[' ']'  */
 #line 471 "parser.y"
+                                                { (yyval.expr) = make_expr(EXPR_VOID); }
+#line 3517 "parser.tab.c"
+    break;
+
+  case 68: /* m_attributes: %empty  */
+#line 474 "parser.y"
                                                 { (yyval.attr_list) = NULL; }
-#line 3490 "parser.tab.c"
+#line 3523 "parser.tab.c"
     break;
 
-  case 70:
-#line 476 "parser.y"
-                                                { (yyval.attr_list) = (yyvsp[-1].attr_list); }
-#line 3496 "parser.tab.c"
-    break;
-
-  case 71:
+  case 70: /* attributes: '[' attrib_list ']'  */
 #line 479 "parser.y"
+                                                { (yyval.attr_list) = (yyvsp[-1].attr_list); }
+#line 3529 "parser.tab.c"
+    break;
+
+  case 71: /* attrib_list: attribute  */
+#line 482 "parser.y"
                                                 { (yyval.attr_list) = append_attr( NULL, (yyvsp[0].attr) ); }
-#line 3502 "parser.tab.c"
+#line 3535 "parser.tab.c"
     break;
 
-  case 72:
-#line 480 "parser.y"
+  case 72: /* attrib_list: attrib_list ',' attribute  */
+#line 483 "parser.y"
                                                 { (yyval.attr_list) = append_attr( (yyvsp[-2].attr_list), (yyvsp[0].attr) ); }
-#line 3508 "parser.tab.c"
+#line 3541 "parser.tab.c"
     break;
 
-  case 73:
-#line 481 "parser.y"
-                                                { (yyval.attr_list) = append_attr( (yyvsp[-3].attr_list), (yyvsp[0].attr) ); }
-#line 3514 "parser.tab.c"
-    break;
-
-  case 74:
+  case 73: /* attrib_list: attrib_list ']' '[' attribute  */
 #line 484 "parser.y"
+                                                { (yyval.attr_list) = append_attr( (yyvsp[-3].attr_list), (yyvsp[0].attr) ); }
+#line 3547 "parser.tab.c"
+    break;
+
+  case 74: /* str_list: aSTRING  */
+#line 487 "parser.y"
                                                 { (yyval.str_list) = append_str( NULL, (yyvsp[0].str) ); }
-#line 3520 "parser.tab.c"
+#line 3553 "parser.tab.c"
     break;
 
-  case 75:
-#line 485 "parser.y"
-                                                { (yyval.str_list) = append_str( (yyvsp[-2].str_list), (yyvsp[0].str) ); }
-#line 3526 "parser.tab.c"
-    break;
-
-  case 76:
+  case 75: /* str_list: str_list ',' aSTRING  */
 #line 488 "parser.y"
-                                                { (yyval.attr) = NULL; }
-#line 3532 "parser.tab.c"
+                                                { (yyval.str_list) = append_str( (yyvsp[-2].str_list), (yyvsp[0].str) ); }
+#line 3559 "parser.tab.c"
     break;
 
-  case 77:
-#line 489 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_AGGREGATABLE); }
-#line 3538 "parser.tab.c"
-    break;
-
-  case 78:
-#line 490 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_ANNOTATION, (yyvsp[-1].str)); }
-#line 3544 "parser.tab.c"
-    break;
-
-  case 79:
+  case 76: /* attribute: %empty  */
 #line 491 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_APPOBJECT); }
-#line 3550 "parser.tab.c"
+                                                { (yyval.attr) = NULL; }
+#line 3565 "parser.tab.c"
     break;
 
-  case 80:
+  case 77: /* attribute: tAGGREGATABLE  */
 #line 492 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_ASYNC); }
-#line 3556 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_AGGREGATABLE); }
+#line 3571 "parser.tab.c"
     break;
 
-  case 81:
+  case 78: /* attribute: tANNOTATION '(' aSTRING ')'  */
 #line 493 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_AUTO_HANDLE); }
-#line 3562 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_ANNOTATION, (yyvsp[-1].str)); }
+#line 3577 "parser.tab.c"
     break;
 
-  case 82:
+  case 79: /* attribute: tAPPOBJECT  */
 #line 494 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_BINDABLE); }
-#line 3568 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_APPOBJECT); }
+#line 3583 "parser.tab.c"
     break;
 
-  case 83:
+  case 80: /* attribute: tASYNC  */
 #line 495 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_BROADCAST); }
-#line 3574 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_ASYNC); }
+#line 3589 "parser.tab.c"
     break;
 
-  case 84:
+  case 81: /* attribute: tAUTOHANDLE  */
 #line 496 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_CALLAS, (yyvsp[-1].var)); }
-#line 3580 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_AUTO_HANDLE); }
+#line 3595 "parser.tab.c"
     break;
 
-  case 85:
+  case 82: /* attribute: tBINDABLE  */
 #line 497 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_CASE, (yyvsp[-1].expr_list)); }
-#line 3586 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_BINDABLE); }
+#line 3601 "parser.tab.c"
     break;
 
-  case 86:
+  case 83: /* attribute: tBROADCAST  */
 #line 498 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_CODE); }
-#line 3592 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_BROADCAST); }
+#line 3607 "parser.tab.c"
     break;
 
-  case 87:
+  case 84: /* attribute: tCALLAS '(' ident ')'  */
 #line 499 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_COMMSTATUS); }
-#line 3598 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_CALLAS, (yyvsp[-1].var)); }
+#line 3613 "parser.tab.c"
     break;
 
-  case 88:
+  case 85: /* attribute: tCASE '(' expr_list_int_const ')'  */
 #line 500 "parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); }
-#line 3604 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_CASE, (yyvsp[-1].expr_list)); }
+#line 3619 "parser.tab.c"
     break;
 
-  case 89:
+  case 86: /* attribute: tCODE  */
 #line 501 "parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ }
-#line 3610 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_CODE); }
+#line 3625 "parser.tab.c"
     break;
 
-  case 90:
+  case 87: /* attribute: tCOMMSTATUS  */
 #line 502 "parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ }
-#line 3616 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_COMMSTATUS); }
+#line 3631 "parser.tab.c"
     break;
 
-  case 91:
+  case 88: /* attribute: tCONTEXTHANDLE  */
 #line 503 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_CONTROL); }
-#line 3622 "parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); }
+#line 3637 "parser.tab.c"
     break;
 
-  case 92:
+  case 89: /* attribute: tCONTEXTHANDLENOSERIALIZE  */
 #line 504 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DECODE); }
-#line 3628 "parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ }
+#line 3643 "parser.tab.c"
     break;
 
-  case 93:
+  case 90: /* attribute: tCONTEXTHANDLESERIALIZE  */
 #line 505 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DEFAULT); }
-#line 3634 "parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ }
+#line 3649 "parser.tab.c"
     break;
 
-  case 94:
+  case 91: /* attribute: tCONTROL  */
 #line 506 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DEFAULTBIND); }
-#line 3640 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_CONTROL); }
+#line 3655 "parser.tab.c"
     break;
 
-  case 95:
+  case 92: /* attribute: tDECODE  */
 #line 507 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); }
-#line 3646 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DECODE); }
+#line 3661 "parser.tab.c"
     break;
 
-  case 96:
+  case 93: /* attribute: tDEFAULT  */
 #line 508 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE, (yyvsp[-1].expr)); }
-#line 3652 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DEFAULT); }
+#line 3667 "parser.tab.c"
     break;
 
-  case 97:
+  case 94: /* attribute: tDEFAULTBIND  */
 #line 509 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); }
-#line 3658 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DEFAULTBIND); }
+#line 3673 "parser.tab.c"
     break;
 
-  case 98:
+  case 95: /* attribute: tDEFAULTCOLLELEM  */
 #line 510 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DISABLECONSISTENCYCHECK); }
-#line 3664 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); }
+#line 3679 "parser.tab.c"
     break;
 
-  case 99:
+  case 96: /* attribute: tDEFAULTVALUE '(' expr_const ')'  */
 #line 511 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); }
-#line 3670 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE, (yyvsp[-1].expr)); }
+#line 3685 "parser.tab.c"
     break;
 
-  case 100:
+  case 97: /* attribute: tDEFAULTVTABLE  */
 #line 512 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[-1].str)); }
-#line 3676 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); }
+#line 3691 "parser.tab.c"
     break;
 
-  case 101:
+  case 98: /* attribute: tDISABLECONSISTENCYCHECK  */
 #line 513 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DUAL); }
-#line 3682 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DISABLECONSISTENCYCHECK); }
+#line 3697 "parser.tab.c"
     break;
 
-  case 102:
+  case 99: /* attribute: tDISPLAYBIND  */
 #line 514 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_ENABLEALLOCATE); }
-#line 3688 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); }
+#line 3703 "parser.tab.c"
     break;
 
-  case 103:
+  case 100: /* attribute: tDLLNAME '(' aSTRING ')'  */
 #line 515 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_ENCODE); }
-#line 3694 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[-1].str)); }
+#line 3709 "parser.tab.c"
     break;
 
-  case 104:
+  case 101: /* attribute: tDUAL  */
 #line 516 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[-1].str_list)); }
-#line 3700 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DUAL); }
+#line 3715 "parser.tab.c"
     break;
 
-  case 105:
+  case 102: /* attribute: tENABLEALLOCATE  */
 #line 517 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_ENTRY, (yyvsp[-1].expr)); }
-#line 3706 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_ENABLEALLOCATE); }
+#line 3721 "parser.tab.c"
     break;
 
-  case 106:
+  case 103: /* attribute: tENCODE  */
 #line 518 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
-#line 3712 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_ENCODE); }
+#line 3727 "parser.tab.c"
     break;
 
-  case 107:
+  case 104: /* attribute: tENDPOINT '(' str_list ')'  */
 #line 519 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_FAULTSTATUS); }
-#line 3718 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[-1].str_list)); }
+#line 3733 "parser.tab.c"
     break;
 
-  case 108:
+  case 105: /* attribute: tENTRY '(' expr_const ')'  */
 #line 520 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_FORCEALLOCATE); }
-#line 3724 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_ENTRY, (yyvsp[-1].expr)); }
+#line 3739 "parser.tab.c"
     break;
 
-  case 109:
+  case 106: /* attribute: tEXPLICITHANDLE  */
 #line 521 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_HANDLE); }
-#line 3730 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
+#line 3745 "parser.tab.c"
     break;
 
-  case 110:
+  case 107: /* attribute: tFAULTSTATUS  */
 #line 522 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[-1].expr)); }
-#line 3736 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_FAULTSTATUS); }
+#line 3751 "parser.tab.c"
     break;
 
-  case 111:
+  case 108: /* attribute: tFORCEALLOCATE  */
 #line 523 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[-1].str)); }
-#line 3742 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_FORCEALLOCATE); }
+#line 3757 "parser.tab.c"
     break;
 
-  case 112:
+  case 109: /* attribute: tHANDLE  */
 #line 524 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[-1].str)); }
-#line 3748 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_HANDLE); }
+#line 3763 "parser.tab.c"
     break;
 
-  case 113:
+  case 110: /* attribute: tHELPCONTEXT '(' expr_int_const ')'  */
 #line 525 "parser.y"
-                                                        { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[-1].expr)); }
-#line 3754 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[-1].expr)); }
+#line 3769 "parser.tab.c"
     break;
 
-  case 114:
+  case 111: /* attribute: tHELPFILE '(' aSTRING ')'  */
 #line 526 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[-1].str)); }
-#line 3760 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[-1].str)); }
+#line 3775 "parser.tab.c"
     break;
 
-  case 115:
+  case 112: /* attribute: tHELPSTRING '(' aSTRING ')'  */
 #line 527 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_HIDDEN); }
-#line 3766 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[-1].str)); }
+#line 3781 "parser.tab.c"
     break;
 
-  case 116:
+  case 113: /* attribute: tHELPSTRINGCONTEXT '(' expr_int_const ')'  */
 #line 528 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[-1].expr)); }
-#line 3772 "parser.tab.c"
+                                                        { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[-1].expr)); }
+#line 3787 "parser.tab.c"
     break;
 
-  case 117:
+  case 114: /* attribute: tHELPSTRINGDLL '(' aSTRING ')'  */
 #line 529 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); }
-#line 3778 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[-1].str)); }
+#line 3793 "parser.tab.c"
     break;
 
-  case 118:
+  case 115: /* attribute: tHIDDEN  */
 #line 530 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_IGNORE); }
-#line 3784 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_HIDDEN); }
+#line 3799 "parser.tab.c"
     break;
 
-  case 119:
+  case 116: /* attribute: tID '(' expr_int_const ')'  */
 #line 531 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[-1].expr)); }
-#line 3790 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[-1].expr)); }
+#line 3805 "parser.tab.c"
     break;
 
-  case 120:
+  case 117: /* attribute: tIDEMPOTENT  */
 #line 532 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); }
-#line 3796 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); }
+#line 3811 "parser.tab.c"
     break;
 
-  case 121:
+  case 118: /* attribute: tIGNORE  */
 #line 533 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[-1].var)); }
-#line 3802 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_IGNORE); }
+#line 3817 "parser.tab.c"
     break;
 
-  case 122:
+  case 119: /* attribute: tIIDIS '(' expr ')'  */
 #line 534 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_IN); }
-#line 3808 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[-1].expr)); }
+#line 3823 "parser.tab.c"
     break;
 
-  case 123:
+  case 120: /* attribute: tIMMEDIATEBIND  */
 #line 535 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_INPUTSYNC); }
-#line 3814 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); }
+#line 3829 "parser.tab.c"
     break;
 
-  case 124:
+  case 121: /* attribute: tIMPLICITHANDLE '(' arg ')'  */
 #line 536 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[-1].expr_list)); }
-#line 3820 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[-1].var)); }
+#line 3835 "parser.tab.c"
     break;
 
-  case 125:
+  case 122: /* attribute: tIN  */
 #line 537 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_LIBLCID, (yyvsp[-1].expr)); }
-#line 3826 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_IN); }
+#line 3841 "parser.tab.c"
     break;
 
-  case 126:
+  case 123: /* attribute: tINPUTSYNC  */
 #line 538 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PARAMLCID); }
-#line 3832 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_INPUTSYNC); }
+#line 3847 "parser.tab.c"
     break;
 
-  case 127:
+  case 124: /* attribute: tLENGTHIS '(' m_exprs ')'  */
 #line 539 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_LICENSED); }
-#line 3838 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[-1].expr_list)); }
+#line 3853 "parser.tab.c"
     break;
 
-  case 128:
+  case 125: /* attribute: tLCID '(' expr_int_const ')'  */
 #line 540 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_LOCAL); }
-#line 3844 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_LIBLCID, (yyvsp[-1].expr)); }
+#line 3859 "parser.tab.c"
     break;
 
-  case 129:
+  case 126: /* attribute: tLCID  */
 #line 541 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_MAYBE); }
-#line 3850 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_PARAMLCID); }
+#line 3865 "parser.tab.c"
     break;
 
-  case 130:
+  case 127: /* attribute: tLICENSED  */
 #line 542 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_MESSAGE); }
-#line 3856 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_LICENSED); }
+#line 3871 "parser.tab.c"
     break;
 
-  case 131:
+  case 128: /* attribute: tLOCAL  */
 #line 543 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_NOCODE); }
-#line 3862 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_LOCAL); }
+#line 3877 "parser.tab.c"
     break;
 
-  case 132:
+  case 129: /* attribute: tMAYBE  */
 #line 544 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); }
-#line 3868 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_MAYBE); }
+#line 3883 "parser.tab.c"
     break;
 
-  case 133:
+  case 130: /* attribute: tMESSAGE  */
 #line 545 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_NONCREATABLE); }
-#line 3874 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_MESSAGE); }
+#line 3889 "parser.tab.c"
     break;
 
-  case 134:
+  case 131: /* attribute: tNOCODE  */
 #line 546 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); }
-#line 3880 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_NOCODE); }
+#line 3895 "parser.tab.c"
     break;
 
-  case 135:
+  case 132: /* attribute: tNONBROWSABLE  */
 #line 547 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_NOTIFY); }
-#line 3886 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); }
+#line 3901 "parser.tab.c"
     break;
 
-  case 136:
+  case 133: /* attribute: tNONCREATABLE  */
 #line 548 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_NOTIFYFLAG); }
-#line 3892 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_NONCREATABLE); }
+#line 3907 "parser.tab.c"
     break;
 
-  case 137:
+  case 134: /* attribute: tNONEXTENSIBLE  */
 #line 549 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_OBJECT); }
-#line 3898 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); }
+#line 3913 "parser.tab.c"
     break;
 
-  case 138:
+  case 135: /* attribute: tNOTIFY  */
 #line 550 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_ODL); }
-#line 3904 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_NOTIFY); }
+#line 3919 "parser.tab.c"
     break;
 
-  case 139:
+  case 136: /* attribute: tNOTIFYFLAG  */
 #line 551 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); }
-#line 3910 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_NOTIFYFLAG); }
+#line 3925 "parser.tab.c"
     break;
 
-  case 140:
+  case 137: /* attribute: tOBJECT  */
 #line 552 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_OPTIMIZE, (yyvsp[-1].str)); }
-#line 3916 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_OBJECT); }
+#line 3931 "parser.tab.c"
     break;
 
-  case 141:
+  case 138: /* attribute: tODL  */
 #line 553 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_OPTIONAL); }
-#line 3922 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_ODL); }
+#line 3937 "parser.tab.c"
     break;
 
-  case 142:
+  case 139: /* attribute: tOLEAUTOMATION  */
 #line 554 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_OUT); }
-#line 3928 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); }
+#line 3943 "parser.tab.c"
     break;
 
-  case 143:
+  case 140: /* attribute: tOPTIMIZE '(' aSTRING ')'  */
 #line 555 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PARTIALIGNORE); }
-#line 3934 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_OPTIMIZE, (yyvsp[-1].str)); }
+#line 3949 "parser.tab.c"
     break;
 
-  case 144:
+  case 141: /* attribute: tOPTIONAL  */
 #line 556 "parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[-1].num)); }
-#line 3940 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_OPTIONAL); }
+#line 3955 "parser.tab.c"
     break;
 
-  case 145:
+  case 142: /* attribute: tOUT  */
 #line 557 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_PROGID, (yyvsp[-1].str)); }
-#line 3946 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_OUT); }
+#line 3961 "parser.tab.c"
     break;
 
-  case 146:
+  case 143: /* attribute: tPARTIALIGNORE  */
 #line 558 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PROPGET); }
-#line 3952 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_PARTIALIGNORE); }
+#line 3967 "parser.tab.c"
     break;
 
-  case 147:
+  case 144: /* attribute: tPOINTERDEFAULT '(' pointer_type ')'  */
 #line 559 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PROPPUT); }
-#line 3958 "parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[-1].num)); }
+#line 3973 "parser.tab.c"
     break;
 
-  case 148:
+  case 145: /* attribute: tPROGID '(' aSTRING ')'  */
 #line 560 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PROPPUTREF); }
-#line 3964 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_PROGID, (yyvsp[-1].str)); }
+#line 3979 "parser.tab.c"
     break;
 
-  case 149:
+  case 146: /* attribute: tPROPGET  */
 #line 561 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PROXY); }
-#line 3970 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_PROPGET); }
+#line 3985 "parser.tab.c"
     break;
 
-  case 150:
+  case 147: /* attribute: tPROPPUT  */
 #line 562 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PUBLIC); }
-#line 3976 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_PROPPUT); }
+#line 3991 "parser.tab.c"
     break;
 
-  case 151:
+  case 148: /* attribute: tPROPPUTREF  */
+#line 563 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PROPPUTREF); }
+#line 3997 "parser.tab.c"
+    break;
+
+  case 149: /* attribute: tPROXY  */
 #line 564 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PROXY); }
+#line 4003 "parser.tab.c"
+    break;
+
+  case 150: /* attribute: tPUBLIC  */
+#line 565 "parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PUBLIC); }
+#line 4009 "parser.tab.c"
+    break;
+
+  case 151: /* attribute: tRANGE '(' expr_int_const ',' expr_int_const ')'  */
+#line 567 "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 3984 "parser.tab.c"
+#line 4017 "parser.tab.c"
     break;
 
-  case 152:
-#line 567 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_READONLY); }
-#line 3990 "parser.tab.c"
-    break;
-
-  case 153:
-#line 568 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_REPRESENTAS, (yyvsp[-1].type)); }
-#line 3996 "parser.tab.c"
-    break;
-
-  case 154:
-#line 569 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_REQUESTEDIT); }
-#line 4002 "parser.tab.c"
-    break;
-
-  case 155:
+  case 152: /* attribute: tREADONLY  */
 #line 570 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_RESTRICTED); }
-#line 4008 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_READONLY); }
+#line 4023 "parser.tab.c"
     break;
 
-  case 156:
+  case 153: /* attribute: tREPRESENTAS '(' type ')'  */
 #line 571 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_RETVAL); }
-#line 4014 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_REPRESENTAS, (yyvsp[-1].type)); }
+#line 4029 "parser.tab.c"
     break;
 
-  case 157:
+  case 154: /* attribute: tREQUESTEDIT  */
 #line 572 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_SIZEIS, (yyvsp[-1].expr_list)); }
-#line 4020 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_REQUESTEDIT); }
+#line 4035 "parser.tab.c"
     break;
 
-  case 158:
+  case 155: /* attribute: tRESTRICTED  */
 #line 573 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_SOURCE); }
-#line 4026 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_RESTRICTED); }
+#line 4041 "parser.tab.c"
     break;
 
-  case 159:
+  case 156: /* attribute: tRETVAL  */
 #line 574 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_STRICTCONTEXTHANDLE); }
-#line 4032 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_RETVAL); }
+#line 4047 "parser.tab.c"
     break;
 
-  case 160:
+  case 157: /* attribute: tSIZEIS '(' m_exprs ')'  */
 #line 575 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_STRING); }
-#line 4038 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_SIZEIS, (yyvsp[-1].expr_list)); }
+#line 4053 "parser.tab.c"
     break;
 
-  case 161:
+  case 158: /* attribute: tSOURCE  */
 #line 576 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_SWITCHIS, (yyvsp[-1].expr)); }
-#line 4044 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_SOURCE); }
+#line 4059 "parser.tab.c"
     break;
 
-  case 162:
+  case 159: /* attribute: tSTRICTCONTEXTHANDLE  */
 #line 577 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_SWITCHTYPE, (yyvsp[-1].type)); }
-#line 4050 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_STRICTCONTEXTHANDLE); }
+#line 4065 "parser.tab.c"
     break;
 
-  case 163:
+  case 160: /* attribute: tSTRING  */
 #line 578 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_TRANSMITAS, (yyvsp[-1].type)); }
-#line 4056 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_STRING); }
+#line 4071 "parser.tab.c"
     break;
 
-  case 164:
+  case 161: /* attribute: tSWITCHIS '(' expr ')'  */
 #line 579 "parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_THREADING, (yyvsp[-1].num)); }
-#line 4062 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_SWITCHIS, (yyvsp[-1].expr)); }
+#line 4077 "parser.tab.c"
     break;
 
-  case 165:
+  case 162: /* attribute: tSWITCHTYPE '(' type ')'  */
 #line 580 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_UIDEFAULT); }
-#line 4068 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_SWITCHTYPE, (yyvsp[-1].type)); }
+#line 4083 "parser.tab.c"
     break;
 
-  case 166:
+  case 163: /* attribute: tTRANSMITAS '(' type ')'  */
 #line 581 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_USESGETLASTERROR); }
-#line 4074 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_TRANSMITAS, (yyvsp[-1].type)); }
+#line 4089 "parser.tab.c"
     break;
 
-  case 167:
+  case 164: /* attribute: tTHREADING '(' threading_type ')'  */
 #line 582 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_USERMARSHAL, (yyvsp[-1].type)); }
-#line 4080 "parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_THREADING, (yyvsp[-1].num)); }
+#line 4095 "parser.tab.c"
     break;
 
-  case 168:
+  case 165: /* attribute: tUIDEFAULT  */
 #line 583 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_UUID, (yyvsp[-1].uuid)); }
-#line 4086 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_UIDEFAULT); }
+#line 4101 "parser.tab.c"
     break;
 
-  case 169:
+  case 166: /* attribute: tUSESGETLASTERROR  */
 #line 584 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_ASYNCUUID, (yyvsp[-1].uuid)); }
-#line 4092 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_USESGETLASTERROR); }
+#line 4107 "parser.tab.c"
     break;
 
-  case 170:
+  case 167: /* attribute: tUSERMARSHAL '(' type ')'  */
 #line 585 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_V1ENUM); }
-#line 4098 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_USERMARSHAL, (yyvsp[-1].type)); }
+#line 4113 "parser.tab.c"
     break;
 
-  case 171:
+  case 168: /* attribute: tUUID '(' uuid_string ')'  */
 #line 586 "parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_VARARG); }
-#line 4104 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_UUID, (yyvsp[-1].uuid)); }
+#line 4119 "parser.tab.c"
     break;
 
-  case 172:
+  case 169: /* attribute: tASYNCUUID '(' uuid_string ')'  */
 #line 587 "parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_VERSION, (yyvsp[-1].num)); }
-#line 4110 "parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_ASYNCUUID, (yyvsp[-1].uuid)); }
+#line 4125 "parser.tab.c"
     break;
 
-  case 173:
+  case 170: /* attribute: tV1ENUM  */
 #line 588 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_VIPROGID, (yyvsp[-1].str)); }
-#line 4116 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_V1ENUM); }
+#line 4131 "parser.tab.c"
     break;
 
-  case 174:
+  case 171: /* attribute: tVARARG  */
 #line 589 "parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_WIREMARSHAL, (yyvsp[-1].type)); }
-#line 4122 "parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_VARARG); }
+#line 4137 "parser.tab.c"
     break;
 
-  case 175:
+  case 172: /* attribute: tVERSION '(' version ')'  */
 #line 590 "parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_POINTERTYPE, (yyvsp[0].num)); }
-#line 4128 "parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_VERSION, (yyvsp[-1].num)); }
+#line 4143 "parser.tab.c"
     break;
 
-  case 177:
-#line 595 "parser.y"
+  case 173: /* attribute: tVIPROGID '(' aSTRING ')'  */
+#line 591 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_VIPROGID, (yyvsp[-1].str)); }
+#line 4149 "parser.tab.c"
+    break;
+
+  case 174: /* attribute: tWIREMARSHAL '(' type ')'  */
+#line 592 "parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_WIREMARSHAL, (yyvsp[-1].type)); }
+#line 4155 "parser.tab.c"
+    break;
+
+  case 175: /* attribute: pointer_type  */
+#line 593 "parser.y"
+                                                { (yyval.attr) = make_attrv(ATTR_POINTERTYPE, (yyvsp[0].num)); }
+#line 4161 "parser.tab.c"
+    break;
+
+  case 177: /* uuid_string: aSTRING  */
+#line 598 "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 4136 "parser.tab.c"
+#line 4169 "parser.tab.c"
     break;
 
-  case 178:
-#line 600 "parser.y"
-                                                { (yyval.str) = xstrdup("__cdecl"); }
-#line 4142 "parser.tab.c"
-    break;
-
-  case 179:
-#line 601 "parser.y"
-                                                { (yyval.str) = xstrdup("__fastcall"); }
-#line 4148 "parser.tab.c"
-    break;
-
-  case 180:
-#line 602 "parser.y"
-                                                { (yyval.str) = xstrdup("__pascal"); }
-#line 4154 "parser.tab.c"
-    break;
-
-  case 181:
+  case 178: /* callconv: tCDECL  */
 #line 603 "parser.y"
-                                                { (yyval.str) = xstrdup("__stdcall"); }
-#line 4160 "parser.tab.c"
+                                                { (yyval.str) = xstrdup("__cdecl"); }
+#line 4175 "parser.tab.c"
     break;
 
-  case 182:
+  case 179: /* callconv: tFASTCALL  */
+#line 604 "parser.y"
+                                                { (yyval.str) = xstrdup("__fastcall"); }
+#line 4181 "parser.tab.c"
+    break;
+
+  case 180: /* callconv: tPASCAL  */
+#line 605 "parser.y"
+                                                { (yyval.str) = xstrdup("__pascal"); }
+#line 4187 "parser.tab.c"
+    break;
+
+  case 181: /* callconv: tSTDCALL  */
 #line 606 "parser.y"
+                                                { (yyval.str) = xstrdup("__stdcall"); }
+#line 4193 "parser.tab.c"
+    break;
+
+  case 182: /* cases: %empty  */
+#line 609 "parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 4166 "parser.tab.c"
+#line 4199 "parser.tab.c"
     break;
 
-  case 183:
-#line 607 "parser.y"
-                                                { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); }
-#line 4172 "parser.tab.c"
-    break;
-
-  case 184:
+  case 183: /* cases: cases case  */
 #line 610 "parser.y"
+                                                { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); }
+#line 4205 "parser.tab.c"
+    break;
+
+  case 184: /* case: tCASE expr_int_const ':' union_field  */
+#line 613 "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 4181 "parser.tab.c"
+#line 4214 "parser.tab.c"
     break;
 
-  case 185:
-#line 614 "parser.y"
+  case 185: /* case: tDEFAULT ':' union_field  */
+#line 617 "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 4190 "parser.tab.c"
+#line 4223 "parser.tab.c"
     break;
 
-  case 186:
-#line 620 "parser.y"
+  case 186: /* enums: %empty  */
+#line 623 "parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 4196 "parser.tab.c"
+#line 4229 "parser.tab.c"
     break;
 
-  case 187:
-#line 621 "parser.y"
+  case 187: /* enums: enum_list ','  */
+#line 624 "parser.y"
                                                 { (yyval.var_list) = (yyvsp[-1].var_list); }
-#line 4202 "parser.tab.c"
+#line 4235 "parser.tab.c"
     break;
 
-  case 189:
-#line 625 "parser.y"
+  case 189: /* enum_list: enum  */
+#line 628 "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 4211 "parser.tab.c"
+#line 4244 "parser.tab.c"
     break;
 
-  case 190:
-#line 629 "parser.y"
+  case 190: /* enum_list: enum_list ',' enum  */
+#line 632 "parser.y"
                                                 { if (!(yyvsp[0].var)->eval)
                                                   {
                                                     var_t *last = LIST_ENTRY( list_tail((yyval.var_list)), var_t, entry );
@@ -4222,656 +4255,698 @@
                                                   }
                                                   (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) );
 						}
-#line 4226 "parser.tab.c"
+#line 4259 "parser.tab.c"
     break;
 
-  case 191:
-#line 641 "parser.y"
+  case 191: /* enum: ident '=' expr_int_const  */
+#line 644 "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 4235 "parser.tab.c"
+#line 4268 "parser.tab.c"
     break;
 
-  case 192:
-#line 645 "parser.y"
+  case 192: /* enum: ident  */
+#line 648 "parser.y"
                                                 { (yyval.var) = reg_const((yyvsp[0].var));
                                                   (yyval.var)->declspec.type = type_new_int(TYPE_BASIC_INT, 0);
 						}
-#line 4243 "parser.tab.c"
+#line 4276 "parser.tab.c"
     break;
 
-  case 193:
-#line 650 "parser.y"
-                                                { (yyval.type) = type_new_enum((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
-#line 4249 "parser.tab.c"
-    break;
-
-  case 194:
+  case 193: /* enumdef: tENUM t_ident '{' enums '}'  */
 #line 653 "parser.y"
+                                                { (yyval.type) = type_new_enum((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
+#line 4282 "parser.tab.c"
+    break;
+
+  case 194: /* m_exprs: m_expr  */
+#line 656 "parser.y"
                                                 { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); }
-#line 4255 "parser.tab.c"
+#line 4288 "parser.tab.c"
     break;
 
-  case 195:
-#line 654 "parser.y"
-                                                { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
-#line 4261 "parser.tab.c"
-    break;
-
-  case 196:
+  case 195: /* m_exprs: m_exprs ',' m_expr  */
 #line 657 "parser.y"
+                                                { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
+#line 4294 "parser.tab.c"
+    break;
+
+  case 196: /* m_expr: %empty  */
+#line 660 "parser.y"
                                                 { (yyval.expr) = make_expr(EXPR_VOID); }
-#line 4267 "parser.tab.c"
+#line 4300 "parser.tab.c"
     break;
 
-  case 198:
-#line 661 "parser.y"
-                                                { (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num)); }
-#line 4273 "parser.tab.c"
-    break;
-
-  case 199:
-#line 662 "parser.y"
-                                                { (yyval.expr) = make_exprl(EXPR_HEXNUM, (yyvsp[0].num)); }
-#line 4279 "parser.tab.c"
-    break;
-
-  case 200:
-#line 663 "parser.y"
-                                                { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[0].dbl)); }
-#line 4285 "parser.tab.c"
-    break;
-
-  case 201:
+  case 198: /* expr: aNUM  */
 #line 664 "parser.y"
-                                                { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 0); }
-#line 4291 "parser.tab.c"
+                                                { (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num)); }
+#line 4306 "parser.tab.c"
     break;
 
-  case 202:
+  case 199: /* expr: aHEXNUM  */
 #line 665 "parser.y"
-                                                { (yyval.expr) = make_exprl(EXPR_NUM, 0); }
-#line 4297 "parser.tab.c"
+                                                { (yyval.expr) = make_exprl(EXPR_HEXNUM, (yyvsp[0].num)); }
+#line 4312 "parser.tab.c"
     break;
 
-  case 203:
+  case 200: /* expr: aDOUBLE  */
 #line 666 "parser.y"
-                                                { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 1); }
-#line 4303 "parser.tab.c"
+                                                { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[0].dbl)); }
+#line 4318 "parser.tab.c"
     break;
 
-  case 204:
+  case 201: /* expr: tFALSE  */
 #line 667 "parser.y"
-                                                { (yyval.expr) = make_exprs(EXPR_STRLIT, (yyvsp[0].str)); }
-#line 4309 "parser.tab.c"
+                                                { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 0); }
+#line 4324 "parser.tab.c"
     break;
 
-  case 205:
+  case 202: /* expr: tNULL  */
 #line 668 "parser.y"
-                                                { (yyval.expr) = make_exprs(EXPR_WSTRLIT, (yyvsp[0].str)); }
-#line 4315 "parser.tab.c"
+                                                { (yyval.expr) = make_exprl(EXPR_NUM, 0); }
+#line 4330 "parser.tab.c"
     break;
 
-  case 206:
+  case 203: /* expr: tTRUE  */
 #line 669 "parser.y"
-                                                { (yyval.expr) = make_exprs(EXPR_CHARCONST, (yyvsp[0].str)); }
-#line 4321 "parser.tab.c"
+                                                { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 1); }
+#line 4336 "parser.tab.c"
     break;
 
-  case 207:
+  case 204: /* expr: aSTRING  */
 #line 670 "parser.y"
-                                                { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str)); }
-#line 4327 "parser.tab.c"
+                                                { (yyval.expr) = make_exprs(EXPR_STRLIT, (yyvsp[0].str)); }
+#line 4342 "parser.tab.c"
     break;
 
-  case 208:
+  case 205: /* expr: aWSTRING  */
 #line 671 "parser.y"
-                                                { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4333 "parser.tab.c"
+                                                { (yyval.expr) = make_exprs(EXPR_WSTRLIT, (yyvsp[0].str)); }
+#line 4348 "parser.tab.c"
     break;
 
-  case 209:
+  case 206: /* expr: aSQSTRING  */
 #line 672 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_LOGOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4339 "parser.tab.c"
+                                                { (yyval.expr) = make_exprs(EXPR_CHARCONST, (yyvsp[0].str)); }
+#line 4354 "parser.tab.c"
     break;
 
-  case 210:
+  case 207: /* expr: aIDENTIFIER  */
 #line 673 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_LOGAND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4345 "parser.tab.c"
+                                                { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str)); }
+#line 4360 "parser.tab.c"
     break;
 
-  case 211:
+  case 208: /* expr: expr '?' expr ':' expr  */
 #line 674 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4351 "parser.tab.c"
+                                                { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4366 "parser.tab.c"
     break;
 
-  case 212:
+  case 209: /* expr: expr LOGICALOR expr  */
 #line 675 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_XOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4357 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_LOGOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4372 "parser.tab.c"
     break;
 
-  case 213:
+  case 210: /* expr: expr LOGICALAND expr  */
 #line 676 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4363 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_LOGAND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4378 "parser.tab.c"
     break;
 
-  case 214:
+  case 211: /* expr: expr '|' expr  */
 #line 677 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_EQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4369 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4384 "parser.tab.c"
     break;
 
-  case 215:
+  case 212: /* expr: expr '^' expr  */
 #line 678 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_INEQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4375 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_XOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4390 "parser.tab.c"
     break;
 
-  case 216:
+  case 213: /* expr: expr '&' expr  */
 #line 679 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_GTR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4381 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4396 "parser.tab.c"
     break;
 
-  case 217:
+  case 214: /* expr: expr EQUALITY expr  */
 #line 680 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_LESS, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4387 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_EQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4402 "parser.tab.c"
     break;
 
-  case 218:
+  case 215: /* expr: expr INEQUALITY expr  */
 #line 681 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_GTREQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4393 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_INEQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4408 "parser.tab.c"
     break;
 
-  case 219:
+  case 216: /* expr: expr '>' expr  */
 #line 682 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_LESSEQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4399 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_GTR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4414 "parser.tab.c"
     break;
 
-  case 220:
+  case 217: /* expr: expr '<' expr  */
 #line 683 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4405 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_LESS, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4420 "parser.tab.c"
     break;
 
-  case 221:
+  case 218: /* expr: expr GREATEREQUAL expr  */
 #line 684 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4411 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_GTREQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4426 "parser.tab.c"
     break;
 
-  case 222:
+  case 219: /* expr: expr LESSEQUAL expr  */
 #line 685 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4417 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_LESSEQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4432 "parser.tab.c"
     break;
 
-  case 223:
+  case 220: /* expr: expr SHL expr  */
 #line 686 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4423 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4438 "parser.tab.c"
     break;
 
-  case 224:
+  case 221: /* expr: expr SHR expr  */
 #line 687 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_MOD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4429 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4444 "parser.tab.c"
     break;
 
-  case 225:
+  case 222: /* expr: expr '+' expr  */
 #line 688 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4435 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4450 "parser.tab.c"
     break;
 
-  case 226:
+  case 223: /* expr: expr '-' expr  */
 #line 689 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4441 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4456 "parser.tab.c"
     break;
 
-  case 227:
+  case 224: /* expr: expr '%' expr  */
 #line 690 "parser.y"
-                                                { (yyval.expr) = make_expr1(EXPR_LOGNOT, (yyvsp[0].expr)); }
-#line 4447 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_MOD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4462 "parser.tab.c"
     break;
 
-  case 228:
+  case 225: /* expr: expr '*' expr  */
 #line 691 "parser.y"
-                                                { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[0].expr)); }
-#line 4453 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4468 "parser.tab.c"
     break;
 
-  case 229:
+  case 226: /* expr: expr '/' expr  */
 #line 692 "parser.y"
-                                                { (yyval.expr) = make_expr1(EXPR_POS, (yyvsp[0].expr)); }
-#line 4459 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4474 "parser.tab.c"
     break;
 
-  case 230:
+  case 227: /* expr: '!' expr  */
 #line 693 "parser.y"
-                                                { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[0].expr)); }
-#line 4465 "parser.tab.c"
+                                                { (yyval.expr) = make_expr1(EXPR_LOGNOT, (yyvsp[0].expr)); }
+#line 4480 "parser.tab.c"
     break;
 
-  case 231:
+  case 228: /* expr: '~' expr  */
 #line 694 "parser.y"
-                                                { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[0].expr)); }
-#line 4471 "parser.tab.c"
+                                                { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[0].expr)); }
+#line 4486 "parser.tab.c"
     break;
 
-  case 232:
+  case 229: /* expr: '+' expr  */
 #line 695 "parser.y"
-                                                { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[0].expr)); }
-#line 4477 "parser.tab.c"
+                                                { (yyval.expr) = make_expr1(EXPR_POS, (yyvsp[0].expr)); }
+#line 4492 "parser.tab.c"
     break;
 
-  case 233:
+  case 230: /* expr: '-' expr  */
 #line 696 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_MEMBER, make_expr1(EXPR_PPTR, (yyvsp[-2].expr)), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
-#line 4483 "parser.tab.c"
+                                                { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[0].expr)); }
+#line 4498 "parser.tab.c"
     break;
 
-  case 234:
+  case 231: /* expr: '&' expr  */
 #line 697 "parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_MEMBER, (yyvsp[-2].expr), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
-#line 4489 "parser.tab.c"
+                                                { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[0].expr)); }
+#line 4504 "parser.tab.c"
     break;
 
-  case 235:
+  case 232: /* expr: '*' expr  */
+#line 698 "parser.y"
+                                                { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[0].expr)); }
+#line 4510 "parser.tab.c"
+    break;
+
+  case 233: /* expr: expr MEMBERPTR aIDENTIFIER  */
 #line 699 "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 4495 "parser.tab.c"
+                                                { (yyval.expr) = make_expr2(EXPR_MEMBER, make_expr1(EXPR_PPTR, (yyvsp[-2].expr)), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
+#line 4516 "parser.tab.c"
     break;
 
-  case 236:
-#line 701 "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 4501 "parser.tab.c"
+  case 234: /* expr: expr '.' aIDENTIFIER  */
+#line 700 "parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_MEMBER, (yyvsp[-2].expr), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
+#line 4522 "parser.tab.c"
     break;
 
-  case 237:
+  case 235: /* expr: '(' decl_spec m_abstract_declarator ')' expr  */
 #line 702 "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 4528 "parser.tab.c"
+    break;
+
+  case 236: /* expr: tSIZEOF '(' decl_spec m_abstract_declarator ')'  */
+#line 704 "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 4534 "parser.tab.c"
+    break;
+
+  case 237: /* expr: expr '[' expr ']'  */
+#line 705 "parser.y"
                                                 { (yyval.expr) = make_expr2(EXPR_ARRAY, (yyvsp[-3].expr), (yyvsp[-1].expr)); }
-#line 4507 "parser.tab.c"
+#line 4540 "parser.tab.c"
     break;
 
-  case 238:
-#line 703 "parser.y"
-                                                { (yyval.expr) = (yyvsp[-1].expr); }
-#line 4513 "parser.tab.c"
-    break;
-
-  case 239:
+  case 238: /* expr: '(' expr ')'  */
 #line 706 "parser.y"
+                                                { (yyval.expr) = (yyvsp[-1].expr); }
+#line 4546 "parser.tab.c"
+    break;
+
+  case 239: /* expr_list_int_const: expr_int_const  */
+#line 709 "parser.y"
                                                 { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); }
-#line 4519 "parser.tab.c"
+#line 4552 "parser.tab.c"
     break;
 
-  case 240:
-#line 707 "parser.y"
-                                                        { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
-#line 4525 "parser.tab.c"
-    break;
-
-  case 241:
+  case 240: /* expr_list_int_const: expr_list_int_const ',' expr_int_const  */
 #line 710 "parser.y"
+                                                        { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
+#line 4558 "parser.tab.c"
+    break;
+
+  case 241: /* expr_int_const: expr  */
+#line 713 "parser.y"
                                                 { (yyval.expr) = (yyvsp[0].expr);
 						  if (!(yyval.expr)->is_const)
 						      error_loc("expression is not an integer constant\n");
 						}
-#line 4534 "parser.tab.c"
+#line 4567 "parser.tab.c"
     break;
 
-  case 242:
-#line 716 "parser.y"
+  case 242: /* expr_const: expr  */
+#line 719 "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 4543 "parser.tab.c"
+#line 4576 "parser.tab.c"
     break;
 
-  case 243:
-#line 722 "parser.y"
+  case 243: /* fields: %empty  */
+#line 725 "parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 4549 "parser.tab.c"
+#line 4582 "parser.tab.c"
     break;
 
-  case 244:
-#line 723 "parser.y"
+  case 244: /* fields: fields field  */
+#line 726 "parser.y"
                                                 { (yyval.var_list) = append_var_list((yyvsp[-1].var_list), (yyvsp[0].var_list)); }
-#line 4555 "parser.tab.c"
+#line 4588 "parser.tab.c"
     break;
 
-  case 245:
-#line 727 "parser.y"
+  case 245: /* field: m_attributes decl_spec struct_declarator_list ';'  */
+#line 730 "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 4564 "parser.tab.c"
+#line 4597 "parser.tab.c"
     break;
 
-  case 246:
-#line 731 "parser.y"
+  case 246: /* field: m_attributes uniondef ';'  */
+#line 734 "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 4573 "parser.tab.c"
+#line 4606 "parser.tab.c"
     break;
 
-  case 247:
-#line 738 "parser.y"
+  case 247: /* ne_union_field: s_field ';'  */
+#line 741 "parser.y"
                                                 { (yyval.var) = (yyvsp[-1].var); }
-#line 4579 "parser.tab.c"
+#line 4612 "parser.tab.c"
     break;
 
-  case 248:
-#line 739 "parser.y"
-                                                { (yyval.var) = make_var(NULL); (yyval.var)->attrs = (yyvsp[-1].attr_list); }
-#line 4585 "parser.tab.c"
-    break;
-
-  case 249:
+  case 248: /* ne_union_field: attributes ';'  */
 #line 742 "parser.y"
+                                                { (yyval.var) = make_var(NULL); (yyval.var)->attrs = (yyvsp[-1].attr_list); }
+#line 4618 "parser.tab.c"
+    break;
+
+  case 249: /* ne_union_fields: %empty  */
+#line 745 "parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 4591 "parser.tab.c"
+#line 4624 "parser.tab.c"
     break;
 
-  case 250:
-#line 743 "parser.y"
+  case 250: /* ne_union_fields: ne_union_fields ne_union_field  */
+#line 746 "parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); }
-#line 4597 "parser.tab.c"
+#line 4630 "parser.tab.c"
     break;
 
-  case 251:
-#line 747 "parser.y"
+  case 251: /* union_field: s_field ';'  */
+#line 750 "parser.y"
                                                 { (yyval.var) = (yyvsp[-1].var); }
-#line 4603 "parser.tab.c"
+#line 4636 "parser.tab.c"
     break;
 
-  case 252:
-#line 748 "parser.y"
-                                                { (yyval.var) = NULL; }
-#line 4609 "parser.tab.c"
-    break;
-
-  case 253:
+  case 252: /* union_field: ';'  */
 #line 751 "parser.y"
+                                                { (yyval.var) = NULL; }
+#line 4642 "parser.tab.c"
+    break;
+
+  case 253: /* s_field: m_attributes decl_spec declarator  */
+#line 754 "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 4618 "parser.tab.c"
+#line 4651 "parser.tab.c"
     break;
 
-  case 254:
-#line 755 "parser.y"
+  case 254: /* s_field: m_attributes structdef  */
+#line 758 "parser.y"
                                                 { var_t *v = make_var(NULL);
 						  v->declspec.type = (yyvsp[0].type); v->attrs = (yyvsp[-1].attr_list);
 						  (yyval.var) = v;
 						}
-#line 4627 "parser.tab.c"
+#line 4660 "parser.tab.c"
     break;
 
-  case 255:
-#line 761 "parser.y"
+  case 255: /* funcdef: declaration  */
+#line 764 "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 4637 "parser.tab.c"
+#line 4670 "parser.tab.c"
     break;
 
-  case 256:
-#line 770 "parser.y"
+  case 256: /* declaration: attributes decl_spec init_declarator  */
+#line 773 "parser.y"
                                                 { (yyval.var) = declare_var((yyvsp[-2].attr_list), (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
 						  free((yyvsp[0].declarator));
 						}
-#line 4645 "parser.tab.c"
+#line 4678 "parser.tab.c"
     break;
 
-  case 257:
-#line 773 "parser.y"
+  case 257: /* declaration: decl_spec init_declarator  */
+#line 776 "parser.y"
                                                 { (yyval.var) = declare_var(NULL, (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
 						  free((yyvsp[0].declarator));
 						}
-#line 4653 "parser.tab.c"
+#line 4686 "parser.tab.c"
     break;
 
-  case 258:
-#line 778 "parser.y"
+  case 258: /* m_ident: %empty  */
+#line 781 "parser.y"
                                                 { (yyval.var) = NULL; }
-#line 4659 "parser.tab.c"
+#line 4692 "parser.tab.c"
     break;
 
-  case 260:
-#line 782 "parser.y"
+  case 260: /* t_ident: %empty  */
+#line 785 "parser.y"
                                                 { (yyval.str) = NULL; }
-#line 4665 "parser.tab.c"
+#line 4698 "parser.tab.c"
     break;
 
-  case 261:
-#line 783 "parser.y"
+  case 261: /* t_ident: aIDENTIFIER  */
+#line 786 "parser.y"
                                                 { (yyval.str) = (yyvsp[0].str); }
-#line 4671 "parser.tab.c"
+#line 4704 "parser.tab.c"
     break;
 
-  case 262:
-#line 784 "parser.y"
-                                                { (yyval.str) = (yyvsp[0].str); }
-#line 4677 "parser.tab.c"
-    break;
-
-  case 263:
+  case 262: /* t_ident: aKNOWNTYPE  */
 #line 787 "parser.y"
-                                                { (yyval.var) = make_var((yyvsp[0].str)); }
-#line 4683 "parser.tab.c"
+                                                { (yyval.str) = (yyvsp[0].str); }
+#line 4710 "parser.tab.c"
     break;
 
-  case 264:
-#line 789 "parser.y"
+  case 263: /* ident: aIDENTIFIER  */
+#line 790 "parser.y"
                                                 { (yyval.var) = make_var((yyvsp[0].str)); }
-#line 4689 "parser.tab.c"
+#line 4716 "parser.tab.c"
     break;
 
-  case 265:
+  case 264: /* ident: aKNOWNTYPE  */
 #line 792 "parser.y"
-                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4695 "parser.tab.c"
+                                                { (yyval.var) = make_var((yyvsp[0].str)); }
+#line 4722 "parser.tab.c"
     break;
 
-  case 266:
-#line 793 "parser.y"
-                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4701 "parser.tab.c"
-    break;
-
-  case 268:
+  case 265: /* base_type: tBYTE  */
 #line 795 "parser.y"
-                                                { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), -1); }
-#line 4707 "parser.tab.c"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4728 "parser.tab.c"
     break;
 
-  case 269:
+  case 266: /* base_type: tWCHAR  */
 #line 796 "parser.y"
-                                                { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), 1); }
-#line 4713 "parser.tab.c"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4734 "parser.tab.c"
     break;
 
-  case 270:
-#line 797 "parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT, 1); }
-#line 4719 "parser.tab.c"
-    break;
-
-  case 271:
+  case 268: /* base_type: tSIGNED int_std  */
 #line 798 "parser.y"
-                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4725 "parser.tab.c"
+                                                { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), -1); }
+#line 4740 "parser.tab.c"
     break;
 
-  case 272:
+  case 269: /* base_type: tUNSIGNED int_std  */
 #line 799 "parser.y"
-                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4731 "parser.tab.c"
+                                                { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), 1); }
+#line 4746 "parser.tab.c"
     break;
 
-  case 273:
+  case 270: /* base_type: tUNSIGNED  */
 #line 800 "parser.y"
-                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4737 "parser.tab.c"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT, 1); }
+#line 4752 "parser.tab.c"
     break;
 
-  case 274:
+  case 271: /* base_type: tFLOAT  */
 #line 801 "parser.y"
                                                 { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4743 "parser.tab.c"
+#line 4758 "parser.tab.c"
     break;
 
-  case 275:
+  case 272: /* base_type: tDOUBLE  */
 #line 802 "parser.y"
                                                 { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4749 "parser.tab.c"
+#line 4764 "parser.tab.c"
     break;
 
-  case 278:
-#line 809 "parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT, 0); }
-#line 4755 "parser.tab.c"
+  case 273: /* base_type: tBOOLEAN  */
+#line 803 "parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4770 "parser.tab.c"
     break;
 
-  case 279:
-#line 810 "parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT16, 0); }
-#line 4761 "parser.tab.c"
+  case 274: /* base_type: tERRORSTATUST  */
+#line 804 "parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4776 "parser.tab.c"
     break;
 
-  case 280:
-#line 811 "parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT8, 0); }
-#line 4767 "parser.tab.c"
+  case 275: /* base_type: tHANDLET  */
+#line 805 "parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4782 "parser.tab.c"
     break;
 
-  case 281:
+  case 278: /* int_std: tINT  */
 #line 812 "parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_LONG, 0); }
-#line 4773 "parser.tab.c"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT, 0); }
+#line 4788 "parser.tab.c"
     break;
 
-  case 282:
+  case 279: /* int_std: tSHORT m_int  */
 #line 813 "parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_HYPER, 0); }
-#line 4779 "parser.tab.c"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT16, 0); }
+#line 4794 "parser.tab.c"
     break;
 
-  case 283:
+  case 280: /* int_std: tSMALL  */
 #line 814 "parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT64, 0); }
-#line 4785 "parser.tab.c"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT8, 0); }
+#line 4800 "parser.tab.c"
     break;
 
-  case 284:
+  case 281: /* int_std: tLONG m_int  */
 #line 815 "parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_CHAR, 0); }
-#line 4791 "parser.tab.c"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_LONG, 0); }
+#line 4806 "parser.tab.c"
     break;
 
-  case 285:
+  case 282: /* int_std: tHYPER m_int  */
 #line 816 "parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT32, 0); }
-#line 4797 "parser.tab.c"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_HYPER, 0); }
+#line 4812 "parser.tab.c"
     break;
 
-  case 286:
+  case 283: /* int_std: tINT64  */
 #line 817 "parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT3264, 0); }
-#line 4803 "parser.tab.c"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT64, 0); }
+#line 4818 "parser.tab.c"
     break;
 
-  case 287:
+  case 284: /* int_std: tCHAR  */
+#line 818 "parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_CHAR, 0); }
+#line 4824 "parser.tab.c"
+    break;
+
+  case 285: /* int_std: tINT32  */
+#line 819 "parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT32, 0); }
+#line 4830 "parser.tab.c"
+    break;
+
+  case 286: /* int_std: tINT3264  */
 #line 820 "parser.y"
-                                                { (yyval.type) = type_new_coclass((yyvsp[0].str)); }
-#line 4809 "parser.tab.c"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT3264, 0); }
+#line 4836 "parser.tab.c"
     break;
 
-  case 288:
-#line 821 "parser.y"
+  case 287: /* qualified_seq: aKNOWNTYPE  */
+#line 824 "parser.y"
+                      { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4842 "parser.tab.c"
+    break;
+
+  case 288: /* $@3: %empty  */
+#line 825 "parser.y"
+                      { push_lookup_namespace((yyvsp[-1].str)); }
+#line 4848 "parser.tab.c"
+    break;
+
+  case 289: /* qualified_seq: aIDENTIFIER '.' $@3 qualified_seq  */
+#line 825 "parser.y"
+                                                                   { (yyval.type) = (yyvsp[0].type); }
+#line 4854 "parser.tab.c"
+    break;
+
+  case 290: /* qualified_type: aKNOWNTYPE  */
+#line 829 "parser.y"
+                     { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4860 "parser.tab.c"
+    break;
+
+  case 291: /* $@4: %empty  */
+#line 830 "parser.y"
+                     { init_lookup_namespace((yyvsp[-1].str)); }
+#line 4866 "parser.tab.c"
+    break;
+
+  case 292: /* qualified_type: aNAMESPACE '.' $@4 qualified_seq  */
+#line 830 "parser.y"
+                                                                  { (yyval.type) = (yyvsp[0].type); }
+#line 4872 "parser.tab.c"
+    break;
+
+  case 293: /* coclass: tCOCLASS aIDENTIFIER  */
+#line 833 "parser.y"
+                                                { (yyval.type) = type_new_coclass((yyvsp[0].str)); }
+#line 4878 "parser.tab.c"
+    break;
+
+  case 294: /* coclass: tCOCLASS aKNOWNTYPE  */
+#line 834 "parser.y"
                                                 { (yyval.type) = find_type((yyvsp[0].str), NULL, 0);
 						  if (type_get_type_detect_alias((yyval.type)) != TYPE_COCLASS)
 						    error_loc("%s was not declared a coclass at %s:%d\n",
 							      (yyvsp[0].str), (yyval.type)->loc_info.input_name,
 							      (yyval.type)->loc_info.line_number);
 						}
-#line 4820 "parser.tab.c"
+#line 4889 "parser.tab.c"
     break;
 
-  case 289:
-#line 829 "parser.y"
+  case 295: /* coclasshdr: attributes coclass  */
+#line 842 "parser.y"
                                                 { (yyval.type) = (yyvsp[0].type);
 						  check_def((yyval.type));
 						  (yyval.type)->attrs = check_coclass_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list));
 						}
-#line 4829 "parser.tab.c"
+#line 4898 "parser.tab.c"
     break;
 
-  case 290:
-#line 836 "parser.y"
+  case 296: /* coclassdef: coclasshdr '{' coclass_ints '}' semicolon_opt  */
+#line 849 "parser.y"
                                                 { (yyval.type) = type_coclass_define((yyvsp[-4].type), (yyvsp[-2].ifref_list)); }
-#line 4835 "parser.tab.c"
+#line 4904 "parser.tab.c"
     break;
 
-  case 291:
-#line 839 "parser.y"
+  case 297: /* namespacedef: tNAMESPACE aIDENTIFIER  */
+#line 852 "parser.y"
                                                 { (yyval.str) = (yyvsp[0].str); }
-#line 4841 "parser.tab.c"
+#line 4910 "parser.tab.c"
     break;
 
-  case 292:
-#line 842 "parser.y"
+  case 298: /* namespacedef: tNAMESPACE aNAMESPACE  */
+#line 853 "parser.y"
+                                                { (yyval.str) = (yyvsp[0].str); }
+#line 4916 "parser.tab.c"
+    break;
+
+  case 299: /* coclass_ints: %empty  */
+#line 856 "parser.y"
                                                 { (yyval.ifref_list) = NULL; }
-#line 4847 "parser.tab.c"
+#line 4922 "parser.tab.c"
     break;
 
-  case 293:
-#line 843 "parser.y"
+  case 300: /* coclass_ints: coclass_ints coclass_int  */
+#line 857 "parser.y"
                                                 { (yyval.ifref_list) = append_ifref( (yyvsp[-1].ifref_list), (yyvsp[0].ifref) ); }
-#line 4853 "parser.tab.c"
+#line 4928 "parser.tab.c"
     break;
 
-  case 294:
-#line 847 "parser.y"
+  case 301: /* coclass_int: m_attributes interfacedec  */
+#line 861 "parser.y"
                                                 { (yyval.ifref) = make_ifref((yyvsp[0].type)); (yyval.ifref)->attrs = (yyvsp[-1].attr_list); }
-#line 4859 "parser.tab.c"
+#line 4934 "parser.tab.c"
     break;
 
-  case 295:
-#line 850 "parser.y"
+  case 302: /* dispinterface: tDISPINTERFACE aIDENTIFIER  */
+#line 864 "parser.y"
                                                 { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
-#line 4865 "parser.tab.c"
+#line 4940 "parser.tab.c"
     break;
 
-  case 296:
-#line 851 "parser.y"
+  case 303: /* dispinterface: tDISPINTERFACE aKNOWNTYPE  */
+#line 865 "parser.y"
                                                 { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
-#line 4871 "parser.tab.c"
+#line 4946 "parser.tab.c"
     break;
 
-  case 297:
-#line 854 "parser.y"
+  case 304: /* dispinterfacehdr: attributes dispinterface  */
+#line 868 "parser.y"
                                                 { attr_t *attrs;
 						  (yyval.type) = (yyvsp[0].type);
 						  check_def((yyval.type));
@@ -4879,668 +4954,668 @@
 						  (yyval.type)->attrs = append_attr( check_dispiface_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list)), attrs );
 						  (yyval.type)->defined = TRUE;
 						}
-#line 4883 "parser.tab.c"
+#line 4958 "parser.tab.c"
     break;
 
-  case 298:
-#line 863 "parser.y"
+  case 305: /* dispint_props: tPROPERTIES ':'  */
+#line 877 "parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 4889 "parser.tab.c"
+#line 4964 "parser.tab.c"
     break;
 
-  case 299:
-#line 864 "parser.y"
+  case 306: /* dispint_props: dispint_props s_field ';'  */
+#line 878 "parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); }
-#line 4895 "parser.tab.c"
+#line 4970 "parser.tab.c"
     break;
 
-  case 300:
-#line 867 "parser.y"
+  case 307: /* dispint_meths: tMETHODS ':'  */
+#line 881 "parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 4901 "parser.tab.c"
+#line 4976 "parser.tab.c"
     break;
 
-  case 301:
-#line 868 "parser.y"
+  case 308: /* dispint_meths: dispint_meths funcdef ';'  */
+#line 882 "parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); }
-#line 4907 "parser.tab.c"
+#line 4982 "parser.tab.c"
     break;
 
-  case 302:
-#line 874 "parser.y"
+  case 309: /* dispinterfacedef: dispinterfacehdr '{' dispint_props dispint_meths '}'  */
+#line 888 "parser.y"
                                                 { (yyval.type) = (yyvsp[-4].type);
 						  type_dispinterface_define((yyval.type), (yyvsp[-2].var_list), (yyvsp[-1].var_list));
 						}
-#line 4915 "parser.tab.c"
+#line 4990 "parser.tab.c"
     break;
 
-  case 303:
-#line 878 "parser.y"
+  case 310: /* dispinterfacedef: dispinterfacehdr '{' interface ';' '}'  */
+#line 892 "parser.y"
                                                 { (yyval.type) = (yyvsp[-4].type);
 						  type_dispinterface_define_from_iface((yyval.type), (yyvsp[-2].type));
 						}
-#line 4923 "parser.tab.c"
+#line 4998 "parser.tab.c"
     break;
 
-  case 304:
-#line 883 "parser.y"
+  case 311: /* inherit: %empty  */
+#line 897 "parser.y"
                                                 { (yyval.type) = NULL; }
-#line 4929 "parser.tab.c"
+#line 5004 "parser.tab.c"
     break;
 
-  case 305:
-#line 884 "parser.y"
-                                                { (yyval.type) = find_type_or_error2((yyvsp[0].str), 0); }
-#line 4935 "parser.tab.c"
+  case 312: /* inherit: ':' qualified_type  */
+#line 898 "parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 5010 "parser.tab.c"
     break;
 
-  case 306:
-#line 887 "parser.y"
+  case 313: /* interface: tINTERFACE aIDENTIFIER  */
+#line 901 "parser.y"
                                                 { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
-#line 4941 "parser.tab.c"
+#line 5016 "parser.tab.c"
     break;
 
-  case 307:
-#line 888 "parser.y"
+  case 314: /* interface: tINTERFACE aKNOWNTYPE  */
+#line 902 "parser.y"
                                                 { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
-#line 4947 "parser.tab.c"
+#line 5022 "parser.tab.c"
     break;
 
-  case 308:
-#line 891 "parser.y"
+  case 315: /* interfacehdr: attributes interface  */
+#line 905 "parser.y"
                                                 { (yyval.type) = (yyvsp[0].type);
 						  check_def((yyvsp[0].type));
 						  (yyvsp[0].type)->attrs = check_iface_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list));
 						  (yyvsp[0].type)->defined = TRUE;
 						}
-#line 4957 "parser.tab.c"
+#line 5032 "parser.tab.c"
     break;
 
-  case 309:
-#line 899 "parser.y"
+  case 316: /* interfacedef: interfacehdr inherit '{' int_statements '}' semicolon_opt  */
+#line 913 "parser.y"
                                                 { (yyval.type) = (yyvsp[-5].type);
 						  if((yyval.type) == (yyvsp[-4].type))
 						    error_loc("Interface can't inherit from itself\n");
 						  type_interface_define((yyval.type), (yyvsp[-4].type), (yyvsp[-2].stmt_list));
 						  check_async_uuid((yyval.type));
 						}
-#line 4968 "parser.tab.c"
+#line 5043 "parser.tab.c"
     break;
 
-  case 310:
-#line 909 "parser.y"
+  case 317: /* interfacedef: interfacehdr ':' aIDENTIFIER '{' import int_statements '}' semicolon_opt  */
+#line 923 "parser.y"
                                                 { (yyval.type) = (yyvsp[-7].type);
 						  type_interface_define((yyval.type), find_type_or_error2((yyvsp[-5].str), 0), (yyvsp[-2].stmt_list));
 						}
-#line 4976 "parser.tab.c"
+#line 5051 "parser.tab.c"
     break;
 
-  case 311:
-#line 912 "parser.y"
+  case 318: /* interfacedef: dispinterfacedef semicolon_opt  */
+#line 926 "parser.y"
                                                 { (yyval.type) = (yyvsp[-1].type); }
-#line 4982 "parser.tab.c"
+#line 5057 "parser.tab.c"
     break;
 
-  case 312:
-#line 916 "parser.y"
+  case 319: /* interfacedec: interface ';'  */
+#line 930 "parser.y"
                                                 { (yyval.type) = (yyvsp[-1].type); }
-#line 4988 "parser.tab.c"
+#line 5063 "parser.tab.c"
     break;
 
-  case 313:
-#line 917 "parser.y"
+  case 320: /* interfacedec: dispinterface ';'  */
+#line 931 "parser.y"
                                                 { (yyval.type) = (yyvsp[-1].type); }
-#line 4994 "parser.tab.c"
+#line 5069 "parser.tab.c"
     break;
 
-  case 314:
-#line 920 "parser.y"
+  case 321: /* module: tMODULE aIDENTIFIER  */
+#line 934 "parser.y"
                                                 { (yyval.type) = type_new_module((yyvsp[0].str)); }
-#line 5000 "parser.tab.c"
+#line 5075 "parser.tab.c"
     break;
 
-  case 315:
-#line 921 "parser.y"
+  case 322: /* module: tMODULE aKNOWNTYPE  */
+#line 935 "parser.y"
                                                 { (yyval.type) = type_new_module((yyvsp[0].str)); }
-#line 5006 "parser.tab.c"
+#line 5081 "parser.tab.c"
     break;
 
-  case 316:
-#line 924 "parser.y"
+  case 323: /* modulehdr: attributes module  */
+#line 938 "parser.y"
                                                 { (yyval.type) = (yyvsp[0].type);
 						  (yyval.type)->attrs = check_module_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list));
 						}
-#line 5014 "parser.tab.c"
+#line 5089 "parser.tab.c"
     break;
 
-  case 317:
-#line 930 "parser.y"
+  case 324: /* moduledef: modulehdr '{' int_statements '}' semicolon_opt  */
+#line 944 "parser.y"
                                                 { (yyval.type) = (yyvsp[-4].type);
                                                   type_module_define((yyval.type), (yyvsp[-2].stmt_list));
 						}
-#line 5022 "parser.tab.c"
+#line 5097 "parser.tab.c"
     break;
 
-  case 318:
-#line 936 "parser.y"
-                                                { (yyval.stgclass) = STG_EXTERN; }
-#line 5028 "parser.tab.c"
-    break;
-
-  case 319:
-#line 937 "parser.y"
-                                                { (yyval.stgclass) = STG_STATIC; }
-#line 5034 "parser.tab.c"
-    break;
-
-  case 320:
-#line 938 "parser.y"
-                                                { (yyval.stgclass) = STG_REGISTER; }
-#line 5040 "parser.tab.c"
-    break;
-
-  case 321:
-#line 942 "parser.y"
-                                                { (yyval.function_specifier) = FUNCTION_SPECIFIER_INLINE; }
-#line 5046 "parser.tab.c"
-    break;
-
-  case 322:
-#line 946 "parser.y"
-                                                { (yyval.type_qualifier) = TYPE_QUALIFIER_CONST; }
-#line 5052 "parser.tab.c"
-    break;
-
-  case 323:
-#line 949 "parser.y"
-                                                { (yyval.type_qualifier) = 0; }
-#line 5058 "parser.tab.c"
-    break;
-
-  case 324:
+  case 325: /* storage_cls_spec: tEXTERN  */
 #line 950 "parser.y"
-                                                { (yyval.type_qualifier) = (yyvsp[-1].type_qualifier) | (yyvsp[0].type_qualifier); }
-#line 5064 "parser.tab.c"
+                                                { (yyval.stgclass) = STG_EXTERN; }
+#line 5103 "parser.tab.c"
     break;
 
-  case 325:
-#line 953 "parser.y"
-                                                { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[0].declspec), NULL, STG_NONE, 0, 0); }
-#line 5070 "parser.tab.c"
+  case 326: /* storage_cls_spec: tSTATIC  */
+#line 951 "parser.y"
+                                                { (yyval.stgclass) = STG_STATIC; }
+#line 5109 "parser.tab.c"
     break;
 
-  case 326:
-#line 955 "parser.y"
-                                                { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[-2].declspec), (yyvsp[0].declspec), STG_NONE, 0, 0); }
-#line 5076 "parser.tab.c"
+  case 327: /* storage_cls_spec: tREGISTER  */
+#line 952 "parser.y"
+                                                { (yyval.stgclass) = STG_REGISTER; }
+#line 5115 "parser.tab.c"
     break;
 
-  case 327:
-#line 958 "parser.y"
-                                                { (yyval.declspec) = NULL; }
-#line 5082 "parser.tab.c"
+  case 328: /* function_specifier: tINLINE  */
+#line 956 "parser.y"
+                                                { (yyval.function_specifier) = FUNCTION_SPECIFIER_INLINE; }
+#line 5121 "parser.tab.c"
     break;
 
-  case 329:
+  case 329: /* type_qualifier: tCONST  */
+#line 960 "parser.y"
+                                                { (yyval.type_qualifier) = TYPE_QUALIFIER_CONST; }
+#line 5127 "parser.tab.c"
+    break;
+
+  case 330: /* m_type_qual_list: %empty  */
 #line 963 "parser.y"
-                                                { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, (yyvsp[-1].type_qualifier), 0); }
-#line 5088 "parser.tab.c"
+                                                { (yyval.type_qualifier) = 0; }
+#line 5133 "parser.tab.c"
     break;
 
-  case 330:
+  case 331: /* m_type_qual_list: m_type_qual_list type_qualifier  */
 #line 964 "parser.y"
-                                                  { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, 0, (yyvsp[-1].function_specifier)); }
-#line 5094 "parser.tab.c"
+                                                { (yyval.type_qualifier) = (yyvsp[-1].type_qualifier) | (yyvsp[0].type_qualifier); }
+#line 5139 "parser.tab.c"
     break;
 
-  case 331:
-#line 965 "parser.y"
-                                                { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, (yyvsp[-1].stgclass), 0, 0); }
-#line 5100 "parser.tab.c"
+  case 332: /* decl_spec: type m_decl_spec_no_type  */
+#line 967 "parser.y"
+                                                { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[0].declspec), NULL, STG_NONE, 0, 0); }
+#line 5145 "parser.tab.c"
     break;
 
-  case 332:
-#line 970 "parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5106 "parser.tab.c"
+  case 333: /* decl_spec: decl_spec_no_type type m_decl_spec_no_type  */
+#line 969 "parser.y"
+                                                { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[-2].declspec), (yyvsp[0].declspec), STG_NONE, 0, 0); }
+#line 5151 "parser.tab.c"
     break;
 
-  case 333:
-#line 971 "parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5112 "parser.tab.c"
+  case 334: /* m_decl_spec_no_type: %empty  */
+#line 972 "parser.y"
+                                                { (yyval.declspec) = NULL; }
+#line 5157 "parser.tab.c"
     break;
 
-  case 335:
-#line 976 "parser.y"
-                                                { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
-#line 5118 "parser.tab.c"
-    break;
-
-  case 336:
+  case 336: /* decl_spec_no_type: type_qualifier m_decl_spec_no_type  */
 #line 977 "parser.y"
-                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
-#line 5124 "parser.tab.c"
+                                                { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, (yyvsp[-1].type_qualifier), 0); }
+#line 5163 "parser.tab.c"
     break;
 
-  case 337:
+  case 337: /* decl_spec_no_type: function_specifier m_decl_spec_no_type  */
 #line 978 "parser.y"
-                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5130 "parser.tab.c"
+                                                  { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, 0, (yyvsp[-1].function_specifier)); }
+#line 5169 "parser.tab.c"
     break;
 
-  case 338:
+  case 338: /* decl_spec_no_type: storage_cls_spec m_decl_spec_no_type  */
 #line 979 "parser.y"
-                                                { (yyval.declarator) = (yyvsp[-3].declarator); append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0); }
-#line 5136 "parser.tab.c"
+                                                { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, (yyvsp[-1].stgclass), 0, 0); }
+#line 5175 "parser.tab.c"
     break;
 
-  case 339:
+  case 339: /* declarator: '*' m_type_qual_list declarator  */
+#line 984 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 5181 "parser.tab.c"
+    break;
+
+  case 340: /* declarator: callconv declarator  */
 #line 985 "parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5142 "parser.tab.c"
-    break;
-
-  case 340:
-#line 986 "parser.y"
                                                 { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5148 "parser.tab.c"
+#line 5187 "parser.tab.c"
     break;
 
-  case 342:
-#line 993 "parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5154 "parser.tab.c"
-    break;
-
-  case 343:
-#line 994 "parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5160 "parser.tab.c"
-    break;
-
-  case 344:
-#line 998 "parser.y"
-                                                { (yyval.declarator) = make_declarator(NULL); }
-#line 5166 "parser.tab.c"
-    break;
-
-  case 346:
-#line 1004 "parser.y"
-                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
-#line 5172 "parser.tab.c"
-    break;
-
-  case 347:
-#line 1005 "parser.y"
-                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5178 "parser.tab.c"
-    break;
-
-  case 348:
-#line 1006 "parser.y"
-                                                { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5184 "parser.tab.c"
-    break;
-
-  case 349:
-#line 1008 "parser.y"
-                                                { (yyval.declarator) = make_declarator(NULL);
-						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
-						}
-#line 5192 "parser.tab.c"
-    break;
-
-  case 350:
-#line 1012 "parser.y"
-                                                { (yyval.declarator) = (yyvsp[-3].declarator);
-						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
-						}
-#line 5200 "parser.tab.c"
-    break;
-
-  case 351:
-#line 1020 "parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5206 "parser.tab.c"
-    break;
-
-  case 352:
-#line 1021 "parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5212 "parser.tab.c"
-    break;
-
-  case 354:
-#line 1028 "parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5218 "parser.tab.c"
-    break;
-
-  case 355:
-#line 1029 "parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5224 "parser.tab.c"
-    break;
-
-  case 356:
-#line 1033 "parser.y"
-                                                { (yyval.declarator) = make_declarator(NULL); }
-#line 5230 "parser.tab.c"
-    break;
-
-  case 358:
-#line 1041 "parser.y"
+  case 342: /* direct_declarator: ident  */
+#line 990 "parser.y"
                                                 { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
-#line 5236 "parser.tab.c"
+#line 5193 "parser.tab.c"
     break;
 
-  case 359:
-#line 1042 "parser.y"
+  case 343: /* direct_declarator: '(' declarator ')'  */
+#line 991 "parser.y"
                                                 { (yyval.declarator) = (yyvsp[-1].declarator); }
-#line 5242 "parser.tab.c"
+#line 5199 "parser.tab.c"
     break;
 
-  case 360:
-#line 1043 "parser.y"
+  case 344: /* direct_declarator: direct_declarator array  */
+#line 992 "parser.y"
                                                 { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5248 "parser.tab.c"
+#line 5205 "parser.tab.c"
     break;
 
-  case 361:
-#line 1044 "parser.y"
+  case 345: /* direct_declarator: direct_declarator '(' m_args ')'  */
+#line 993 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[-3].declarator); append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0); }
+#line 5211 "parser.tab.c"
+    break;
+
+  case 346: /* abstract_declarator: '*' m_type_qual_list m_abstract_declarator  */
+#line 999 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 5217 "parser.tab.c"
+    break;
+
+  case 347: /* abstract_declarator: callconv m_abstract_declarator  */
+#line 1000 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 5223 "parser.tab.c"
+    break;
+
+  case 349: /* abstract_declarator_no_direct: '*' m_type_qual_list m_any_declarator  */
+#line 1007 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 5229 "parser.tab.c"
+    break;
+
+  case 350: /* abstract_declarator_no_direct: callconv m_any_declarator  */
+#line 1008 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 5235 "parser.tab.c"
+    break;
+
+  case 351: /* m_abstract_declarator: %empty  */
+#line 1012 "parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL); }
+#line 5241 "parser.tab.c"
+    break;
+
+  case 353: /* abstract_direct_declarator: '(' abstract_declarator_no_direct ')'  */
+#line 1018 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
+#line 5247 "parser.tab.c"
+    break;
+
+  case 354: /* abstract_direct_declarator: abstract_direct_declarator array  */
+#line 1019 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
+#line 5253 "parser.tab.c"
+    break;
+
+  case 355: /* abstract_direct_declarator: array  */
+#line 1020 "parser.y"
                                                 { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5254 "parser.tab.c"
+#line 5259 "parser.tab.c"
     break;
 
-  case 362:
-#line 1046 "parser.y"
+  case 356: /* abstract_direct_declarator: '(' m_args ')'  */
+#line 1022 "parser.y"
                                                 { (yyval.declarator) = make_declarator(NULL);
 						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
 						}
-#line 5262 "parser.tab.c"
+#line 5267 "parser.tab.c"
     break;
 
-  case 363:
-#line 1050 "parser.y"
+  case 357: /* abstract_direct_declarator: abstract_direct_declarator '(' m_args ')'  */
+#line 1026 "parser.y"
                                                 { (yyval.declarator) = (yyvsp[-3].declarator);
 						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
 						}
-#line 5270 "parser.tab.c"
+#line 5275 "parser.tab.c"
     break;
 
-  case 364:
+  case 358: /* any_declarator: '*' m_type_qual_list m_any_declarator  */
+#line 1034 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 5281 "parser.tab.c"
+    break;
+
+  case 359: /* any_declarator: callconv m_any_declarator  */
+#line 1035 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 5287 "parser.tab.c"
+    break;
+
+  case 361: /* any_declarator_no_direct: '*' m_type_qual_list m_any_declarator  */
+#line 1042 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 5293 "parser.tab.c"
+    break;
+
+  case 362: /* any_declarator_no_direct: callconv m_any_declarator  */
+#line 1043 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 5299 "parser.tab.c"
+    break;
+
+  case 363: /* m_any_declarator: %empty  */
+#line 1047 "parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL); }
+#line 5305 "parser.tab.c"
+    break;
+
+  case 365: /* any_direct_declarator: ident  */
+#line 1055 "parser.y"
+                                                { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
+#line 5311 "parser.tab.c"
+    break;
+
+  case 366: /* any_direct_declarator: '(' any_declarator_no_direct ')'  */
 #line 1056 "parser.y"
-                                                { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
-#line 5276 "parser.tab.c"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
+#line 5317 "parser.tab.c"
     break;
 
-  case 365:
+  case 367: /* any_direct_declarator: any_direct_declarator array  */
 #line 1057 "parser.y"
-                                                { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
-#line 5282 "parser.tab.c"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
+#line 5323 "parser.tab.c"
     break;
 
-  case 366:
+  case 368: /* any_direct_declarator: array  */
+#line 1058 "parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
+#line 5329 "parser.tab.c"
+    break;
+
+  case 369: /* any_direct_declarator: '(' m_args ')'  */
 #line 1060 "parser.y"
-                                                { (yyval.expr) = NULL; }
-#line 5288 "parser.tab.c"
+                                                { (yyval.declarator) = make_declarator(NULL);
+						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
+						}
+#line 5337 "parser.tab.c"
     break;
 
-  case 367:
-#line 1061 "parser.y"
-                                                { (yyval.expr) = (yyvsp[0].expr); }
-#line 5294 "parser.tab.c"
-    break;
-
-  case 368:
+  case 370: /* any_direct_declarator: any_direct_declarator '(' m_args ')'  */
 #line 1064 "parser.y"
+                                                { (yyval.declarator) = (yyvsp[-3].declarator);
+						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
+						}
+#line 5345 "parser.tab.c"
+    break;
+
+  case 371: /* declarator_list: declarator  */
+#line 1070 "parser.y"
+                                                { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
+#line 5351 "parser.tab.c"
+    break;
+
+  case 372: /* declarator_list: declarator_list ',' declarator  */
+#line 1071 "parser.y"
+                                                { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
+#line 5357 "parser.tab.c"
+    break;
+
+  case 373: /* m_bitfield: %empty  */
+#line 1074 "parser.y"
+                                                { (yyval.expr) = NULL; }
+#line 5363 "parser.tab.c"
+    break;
+
+  case 374: /* m_bitfield: ':' expr_const  */
+#line 1075 "parser.y"
+                                                { (yyval.expr) = (yyvsp[0].expr); }
+#line 5369 "parser.tab.c"
+    break;
+
+  case 375: /* struct_declarator: any_declarator m_bitfield  */
+#line 1078 "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 5303 "parser.tab.c"
+#line 5378 "parser.tab.c"
     break;
 
-  case 369:
-#line 1071 "parser.y"
-                                                { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
-#line 5309 "parser.tab.c"
-    break;
-
-  case 370:
-#line 1073 "parser.y"
-                                                { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
-#line 5315 "parser.tab.c"
-    break;
-
-  case 371:
-#line 1077 "parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); }
-#line 5321 "parser.tab.c"
-    break;
-
-  case 372:
-#line 1078 "parser.y"
-                                                { (yyval.declarator) = (yyvsp[-2].declarator); (yyvsp[-2].declarator)->var->eval = (yyvsp[0].expr); }
-#line 5327 "parser.tab.c"
-    break;
-
-  case 373:
-#line 1082 "parser.y"
-                                                { (yyval.num) = THREADING_APARTMENT; }
-#line 5333 "parser.tab.c"
-    break;
-
-  case 374:
-#line 1083 "parser.y"
-                                                { (yyval.num) = THREADING_NEUTRAL; }
-#line 5339 "parser.tab.c"
-    break;
-
-  case 375:
-#line 1084 "parser.y"
-                                                { (yyval.num) = THREADING_SINGLE; }
-#line 5345 "parser.tab.c"
-    break;
-
-  case 376:
+  case 376: /* struct_declarator_list: struct_declarator  */
 #line 1085 "parser.y"
-                                                { (yyval.num) = THREADING_FREE; }
-#line 5351 "parser.tab.c"
+                                                { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
+#line 5384 "parser.tab.c"
     break;
 
-  case 377:
-#line 1086 "parser.y"
-                                                { (yyval.num) = THREADING_BOTH; }
-#line 5357 "parser.tab.c"
+  case 377: /* struct_declarator_list: struct_declarator_list ',' struct_declarator  */
+#line 1087 "parser.y"
+                                                { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
+#line 5390 "parser.tab.c"
     break;
 
-  case 378:
-#line 1090 "parser.y"
-                                                { (yyval.num) = FC_RP; }
-#line 5363 "parser.tab.c"
-    break;
-
-  case 379:
+  case 378: /* init_declarator: declarator  */
 #line 1091 "parser.y"
-                                                { (yyval.num) = FC_UP; }
-#line 5369 "parser.tab.c"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); }
+#line 5396 "parser.tab.c"
     break;
 
-  case 380:
+  case 379: /* init_declarator: declarator '=' expr_const  */
 #line 1092 "parser.y"
-                                                { (yyval.num) = FC_FP; }
-#line 5375 "parser.tab.c"
+                                                { (yyval.declarator) = (yyvsp[-2].declarator); (yyvsp[-2].declarator)->var->eval = (yyvsp[0].expr); }
+#line 5402 "parser.tab.c"
     break;
 
-  case 381:
-#line 1095 "parser.y"
-                                                { (yyval.type) = type_new_struct((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
-#line 5381 "parser.tab.c"
+  case 380: /* threading_type: tAPARTMENT  */
+#line 1096 "parser.y"
+                                                { (yyval.num) = THREADING_APARTMENT; }
+#line 5408 "parser.tab.c"
     break;
 
-  case 382:
+  case 381: /* threading_type: tNEUTRAL  */
+#line 1097 "parser.y"
+                                                { (yyval.num) = THREADING_NEUTRAL; }
+#line 5414 "parser.tab.c"
+    break;
+
+  case 382: /* threading_type: tSINGLE  */
 #line 1098 "parser.y"
-                                                { (yyval.type) = type_new_void(); }
-#line 5387 "parser.tab.c"
+                                                { (yyval.num) = THREADING_SINGLE; }
+#line 5420 "parser.tab.c"
     break;
 
-  case 383:
+  case 383: /* threading_type: tFREE  */
 #line 1099 "parser.y"
-                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 5393 "parser.tab.c"
+                                                { (yyval.num) = THREADING_FREE; }
+#line 5426 "parser.tab.c"
     break;
 
-  case 384:
+  case 384: /* threading_type: tBOTH  */
 #line 1100 "parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); }
-#line 5399 "parser.tab.c"
+                                                { (yyval.num) = THREADING_BOTH; }
+#line 5432 "parser.tab.c"
     break;
 
-  case 385:
-#line 1101 "parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); }
-#line 5405 "parser.tab.c"
-    break;
-
-  case 386:
-#line 1102 "parser.y"
-                                                { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 5411 "parser.tab.c"
-    break;
-
-  case 387:
-#line 1103 "parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); }
-#line 5417 "parser.tab.c"
-    break;
-
-  case 388:
+  case 385: /* pointer_type: tREF  */
 #line 1104 "parser.y"
-                                                { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 5423 "parser.tab.c"
+                                                { (yyval.num) = FC_RP; }
+#line 5438 "parser.tab.c"
     break;
 
-  case 389:
+  case 386: /* pointer_type: tUNIQUE  */
 #line 1105 "parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); }
-#line 5429 "parser.tab.c"
+                                                { (yyval.num) = FC_UP; }
+#line 5444 "parser.tab.c"
     break;
 
-  case 390:
+  case 387: /* pointer_type: tPTR  */
 #line 1106 "parser.y"
+                                                { (yyval.num) = FC_FP; }
+#line 5450 "parser.tab.c"
+    break;
+
+  case 388: /* structdef: tSTRUCT t_ident '{' fields '}'  */
+#line 1109 "parser.y"
+                                                { (yyval.type) = type_new_struct((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
+#line 5456 "parser.tab.c"
+    break;
+
+  case 389: /* type: tVOID  */
+#line 1112 "parser.y"
+                                                { (yyval.type) = type_new_void(); }
+#line 5462 "parser.tab.c"
+    break;
+
+  case 390: /* type: qualified_type  */
+#line 1113 "parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 5468 "parser.tab.c"
+    break;
+
+  case 391: /* type: base_type  */
+#line 1114 "parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 5474 "parser.tab.c"
+    break;
+
+  case 392: /* type: enumdef  */
+#line 1115 "parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 5480 "parser.tab.c"
+    break;
+
+  case 393: /* type: tENUM aIDENTIFIER  */
+#line 1116 "parser.y"
+                                                { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
+#line 5486 "parser.tab.c"
+    break;
+
+  case 394: /* type: structdef  */
+#line 1117 "parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 5492 "parser.tab.c"
+    break;
+
+  case 395: /* type: tSTRUCT aIDENTIFIER  */
+#line 1118 "parser.y"
+                                                { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
+#line 5498 "parser.tab.c"
+    break;
+
+  case 396: /* type: uniondef  */
+#line 1119 "parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); }
+#line 5504 "parser.tab.c"
+    break;
+
+  case 397: /* type: tUNION aIDENTIFIER  */
+#line 1120 "parser.y"
                                                 { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
-#line 5435 "parser.tab.c"
+#line 5510 "parser.tab.c"
     break;
 
-  case 391:
-#line 1107 "parser.y"
+  case 398: /* type: tSAFEARRAY '(' type ')'  */
+#line 1121 "parser.y"
                                                 { (yyval.type) = make_safearray((yyvsp[-1].type)); }
-#line 5441 "parser.tab.c"
+#line 5516 "parser.tab.c"
     break;
 
-  case 392:
-#line 1111 "parser.y"
+  case 399: /* typedef: m_attributes tTYPEDEF m_attributes decl_spec declarator_list  */
+#line 1125 "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 5450 "parser.tab.c"
+#line 5525 "parser.tab.c"
     break;
 
-  case 393:
-#line 1118 "parser.y"
+  case 400: /* uniondef: tUNION t_ident '{' ne_union_fields '}'  */
+#line 1132 "parser.y"
                                                 { (yyval.type) = type_new_nonencapsulated_union((yyvsp[-3].str), TRUE, (yyvsp[-1].var_list)); }
-#line 5456 "parser.tab.c"
+#line 5531 "parser.tab.c"
     break;
 
-  case 394:
-#line 1121 "parser.y"
+  case 401: /* uniondef: tUNION t_ident tSWITCH '(' s_field ')' m_ident '{' cases '}'  */
+#line 1135 "parser.y"
                                                 { (yyval.type) = type_new_encapsulated_union((yyvsp[-8].str), (yyvsp[-5].var), (yyvsp[-3].var), (yyvsp[-1].var_list)); }
-#line 5462 "parser.tab.c"
+#line 5537 "parser.tab.c"
     break;
 
-  case 395:
-#line 1125 "parser.y"
+  case 402: /* version: aNUM  */
+#line 1139 "parser.y"
                                                 { (yyval.num) = MAKEVERSION((yyvsp[0].num), 0); }
-#line 5468 "parser.tab.c"
+#line 5543 "parser.tab.c"
     break;
 
-  case 396:
-#line 1126 "parser.y"
-                                                { (yyval.num) = MAKEVERSION((yyvsp[-2].num), (yyvsp[0].num)); }
-#line 5474 "parser.tab.c"
-    break;
-
-  case 397:
-#line 1127 "parser.y"
-                                                { (yyval.num) = (yyvsp[0].num); }
-#line 5480 "parser.tab.c"
-    break;
-
-  case 402:
+  case 403: /* version: aNUM '.' aNUM  */
 #line 1140 "parser.y"
+                                                { (yyval.num) = MAKEVERSION((yyvsp[-2].num), (yyvsp[0].num)); }
+#line 5549 "parser.tab.c"
+    break;
+
+  case 404: /* version: aHEXNUM  */
+#line 1141 "parser.y"
+                                                { (yyval.num) = (yyvsp[0].num); }
+#line 5555 "parser.tab.c"
+    break;
+
+  case 409: /* acf_int_statement: tTYPEDEF acf_attributes aKNOWNTYPE ';'  */
+#line 1154 "parser.y"
                                                 { type_t *type = find_type_or_error((yyvsp[-1].str), 0);
                                                   type->attrs = append_attr_list(type->attrs, (yyvsp[-2].attr_list));
                                                 }
-#line 5488 "parser.tab.c"
+#line 5563 "parser.tab.c"
     break;
 
-  case 403:
-#line 1145 "parser.y"
+  case 410: /* acf_interface: acf_attributes tINTERFACE aKNOWNTYPE '{' acf_int_statements '}'  */
+#line 1159 "parser.y"
                                                 {  type_t *iface = find_type_or_error2((yyvsp[-3].str), 0);
                                                    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 5498 "parser.tab.c"
+#line 5573 "parser.tab.c"
     break;
 
-  case 404:
-#line 1152 "parser.y"
+  case 411: /* acf_attributes: %empty  */
+#line 1166 "parser.y"
                                                 { (yyval.attr_list) = NULL; }
-#line 5504 "parser.tab.c"
+#line 5579 "parser.tab.c"
     break;
 
-  case 405:
-#line 1153 "parser.y"
+  case 412: /* acf_attributes: '[' acf_attribute_list ']'  */
+#line 1167 "parser.y"
                                                 { (yyval.attr_list) = (yyvsp[-1].attr_list); }
-#line 5510 "parser.tab.c"
+#line 5585 "parser.tab.c"
     break;
 
-  case 406:
-#line 1156 "parser.y"
+  case 413: /* acf_attribute_list: acf_attribute  */
+#line 1170 "parser.y"
                                                 { (yyval.attr_list) = append_attr(NULL, (yyvsp[0].attr)); }
-#line 5516 "parser.tab.c"
+#line 5591 "parser.tab.c"
     break;
 
-  case 407:
-#line 1157 "parser.y"
+  case 414: /* acf_attribute_list: acf_attribute_list ',' acf_attribute  */
+#line 1171 "parser.y"
                                                 { (yyval.attr_list) = append_attr((yyvsp[-2].attr_list), (yyvsp[0].attr)); }
-#line 5522 "parser.tab.c"
+#line 5597 "parser.tab.c"
     break;
 
-  case 408:
-#line 1160 "parser.y"
+  case 415: /* acf_attribute: tENCODE  */
+#line 1174 "parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_ENCODE); }
-#line 5528 "parser.tab.c"
+#line 5603 "parser.tab.c"
     break;
 
-  case 409:
-#line 1161 "parser.y"
+  case 416: /* acf_attribute: tDECODE  */
+#line 1175 "parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DECODE); }
-#line 5534 "parser.tab.c"
+#line 5609 "parser.tab.c"
     break;
 
-  case 410:
-#line 1162 "parser.y"
+  case 417: /* acf_attribute: tEXPLICITHANDLE  */
+#line 1176 "parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
-#line 5540 "parser.tab.c"
+#line 5615 "parser.tab.c"
     break;
 
 
-#line 5544 "parser.tab.c"
+#line 5619 "parser.tab.c"
 
       default: break;
     }
@@ -5730,13 +5805,13 @@
 yyexhaustedlab:
   yyerror (YY_("memory exhausted"));
   yyresult = 2;
-  /* Fall through.  */
+  goto yyreturn;
 #endif
 
 
-/*-----------------------------------------------------.
-| yyreturn -- parsing is finished, return the result.  |
-`-----------------------------------------------------*/
+/*-------------------------------------------------------.
+| yyreturn -- parsing is finished, clean up and return.  |
+`-------------------------------------------------------*/
 yyreturn:
   if (yychar != YYEMPTY)
     {
@@ -5765,7 +5840,7 @@
   return yyresult;
 }
 
-#line 1164 "parser.y"
+#line 1178 "parser.y"
 
 
 static void decl_builtin_basic(const char *name, enum type_basic_type type)
@@ -6453,6 +6528,20 @@
   current_namespace = current_namespace->parent;
 }
 
+static void init_lookup_namespace(const char *name)
+{
+    if (!(lookup_namespace = find_sub_namespace(&global_namespace, name)))
+        error_loc("namespace '%s' not found\n", name);
+}
+
+static void push_lookup_namespace(const char *name)
+{
+    struct namespace *namespace;
+    if (!(namespace = find_sub_namespace(lookup_namespace, name)))
+        error_loc("namespace '%s' not found\n", name);
+    lookup_namespace = namespace;
+}
+
 struct rtype {
   const char *name;
   type_t *type;
@@ -6564,12 +6653,14 @@
 
 static type_t *find_type_or_error(const char *name, int t)
 {
-  type_t *type = find_type(name, NULL, t);
-  if (!type) {
-    error_loc("type '%s' not found\n", name);
-    return NULL;
-  }
-  return type;
+    type_t *type;
+    if (!(type = find_type(name, current_namespace, t)) &&
+        !(type = find_type(name, lookup_namespace, t)))
+    {
+        error_loc("type '%s' not found\n", name);
+        return NULL;
+    }
+    return type;
 }
 
 static type_t *find_type_or_error2(char *name, int t)
@@ -6581,7 +6672,15 @@
 
 int is_type(const char *name)
 {
-  return find_type(name, current_namespace, 0) != NULL;
+    return find_type(name, current_namespace, 0) != NULL ||
+           find_type(name, lookup_namespace, 0) != NULL;
+}
+
+int is_namespace(const char *name)
+{
+    if (!winrt_mode) return 0;
+    return find_sub_namespace(current_namespace, name) != NULL ||
+           find_sub_namespace(&global_namespace, name) != NULL;
 }
 
 type_t *get_type(enum type_type type, char *name, struct namespace *namespace, int t)
diff --git a/mingw-w64-tools/widl/src/parser.tab.h b/mingw-w64-tools/widl/src/parser.tab.h
index 63c87f0..526a4c3 100644
--- a/mingw-w64-tools/widl/src/parser.tab.h
+++ b/mingw-w64-tools/widl/src/parser.tab.h
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.6.2.  */
+/* A Bison parser, made by GNU Bison 3.7.2.  */
 
 /* Bison interface for Yacc-like parsers in C
 
@@ -57,189 +57,190 @@
     aIDENTIFIER = 258,             /* aIDENTIFIER  */
     aPRAGMA = 259,                 /* aPRAGMA  */
     aKNOWNTYPE = 260,              /* aKNOWNTYPE  */
-    aNUM = 261,                    /* aNUM  */
-    aHEXNUM = 262,                 /* aHEXNUM  */
-    aDOUBLE = 263,                 /* aDOUBLE  */
-    aSTRING = 264,                 /* aSTRING  */
-    aWSTRING = 265,                /* aWSTRING  */
-    aSQSTRING = 266,               /* aSQSTRING  */
-    aUUID = 267,                   /* aUUID  */
-    aEOF = 268,                    /* aEOF  */
-    aACF = 269,                    /* aACF  */
-    SHL = 270,                     /* SHL  */
-    SHR = 271,                     /* SHR  */
-    MEMBERPTR = 272,               /* MEMBERPTR  */
-    EQUALITY = 273,                /* EQUALITY  */
-    INEQUALITY = 274,              /* INEQUALITY  */
-    GREATEREQUAL = 275,            /* GREATEREQUAL  */
-    LESSEQUAL = 276,               /* LESSEQUAL  */
-    LOGICALOR = 277,               /* LOGICALOR  */
-    LOGICALAND = 278,              /* LOGICALAND  */
-    ELLIPSIS = 279,                /* ELLIPSIS  */
-    tAGGREGATABLE = 280,           /* tAGGREGATABLE  */
-    tALLOCATE = 281,               /* tALLOCATE  */
-    tANNOTATION = 282,             /* tANNOTATION  */
-    tAPPOBJECT = 283,              /* tAPPOBJECT  */
-    tASYNC = 284,                  /* tASYNC  */
-    tASYNCUUID = 285,              /* tASYNCUUID  */
-    tAUTOHANDLE = 286,             /* tAUTOHANDLE  */
-    tBINDABLE = 287,               /* tBINDABLE  */
-    tBOOLEAN = 288,                /* tBOOLEAN  */
-    tBROADCAST = 289,              /* tBROADCAST  */
-    tBYTE = 290,                   /* tBYTE  */
-    tBYTECOUNT = 291,              /* tBYTECOUNT  */
-    tCALLAS = 292,                 /* tCALLAS  */
-    tCALLBACK = 293,               /* tCALLBACK  */
-    tCASE = 294,                   /* tCASE  */
-    tCDECL = 295,                  /* tCDECL  */
-    tCHAR = 296,                   /* tCHAR  */
-    tCOCLASS = 297,                /* tCOCLASS  */
-    tCODE = 298,                   /* tCODE  */
-    tCOMMSTATUS = 299,             /* tCOMMSTATUS  */
-    tCONST = 300,                  /* tCONST  */
-    tCONTEXTHANDLE = 301,          /* tCONTEXTHANDLE  */
-    tCONTEXTHANDLENOSERIALIZE = 302, /* tCONTEXTHANDLENOSERIALIZE  */
-    tCONTEXTHANDLESERIALIZE = 303, /* tCONTEXTHANDLESERIALIZE  */
-    tCONTROL = 304,                /* tCONTROL  */
-    tCPPQUOTE = 305,               /* tCPPQUOTE  */
-    tDECODE = 306,                 /* tDECODE  */
-    tDEFAULT = 307,                /* tDEFAULT  */
-    tDEFAULTBIND = 308,            /* tDEFAULTBIND  */
-    tDEFAULTCOLLELEM = 309,        /* tDEFAULTCOLLELEM  */
-    tDEFAULTVALUE = 310,           /* tDEFAULTVALUE  */
-    tDEFAULTVTABLE = 311,          /* tDEFAULTVTABLE  */
-    tDISABLECONSISTENCYCHECK = 312, /* tDISABLECONSISTENCYCHECK  */
-    tDISPLAYBIND = 313,            /* tDISPLAYBIND  */
-    tDISPINTERFACE = 314,          /* tDISPINTERFACE  */
-    tDLLNAME = 315,                /* tDLLNAME  */
-    tDOUBLE = 316,                 /* tDOUBLE  */
-    tDUAL = 317,                   /* tDUAL  */
-    tENABLEALLOCATE = 318,         /* tENABLEALLOCATE  */
-    tENCODE = 319,                 /* tENCODE  */
-    tENDPOINT = 320,               /* tENDPOINT  */
-    tENTRY = 321,                  /* tENTRY  */
-    tENUM = 322,                   /* tENUM  */
-    tERRORSTATUST = 323,           /* tERRORSTATUST  */
-    tEXPLICITHANDLE = 324,         /* tEXPLICITHANDLE  */
-    tEXTERN = 325,                 /* tEXTERN  */
-    tFALSE = 326,                  /* tFALSE  */
-    tFASTCALL = 327,               /* tFASTCALL  */
-    tFAULTSTATUS = 328,            /* tFAULTSTATUS  */
-    tFLOAT = 329,                  /* tFLOAT  */
-    tFORCEALLOCATE = 330,          /* tFORCEALLOCATE  */
-    tHANDLE = 331,                 /* tHANDLE  */
-    tHANDLET = 332,                /* tHANDLET  */
-    tHELPCONTEXT = 333,            /* tHELPCONTEXT  */
-    tHELPFILE = 334,               /* tHELPFILE  */
-    tHELPSTRING = 335,             /* tHELPSTRING  */
-    tHELPSTRINGCONTEXT = 336,      /* tHELPSTRINGCONTEXT  */
-    tHELPSTRINGDLL = 337,          /* tHELPSTRINGDLL  */
-    tHIDDEN = 338,                 /* tHIDDEN  */
-    tHYPER = 339,                  /* tHYPER  */
-    tID = 340,                     /* tID  */
-    tIDEMPOTENT = 341,             /* tIDEMPOTENT  */
-    tIGNORE = 342,                 /* tIGNORE  */
-    tIIDIS = 343,                  /* tIIDIS  */
-    tIMMEDIATEBIND = 344,          /* tIMMEDIATEBIND  */
-    tIMPLICITHANDLE = 345,         /* tIMPLICITHANDLE  */
-    tIMPORT = 346,                 /* tIMPORT  */
-    tIMPORTLIB = 347,              /* tIMPORTLIB  */
-    tIN = 348,                     /* tIN  */
-    tIN_LINE = 349,                /* tIN_LINE  */
-    tINLINE = 350,                 /* tINLINE  */
-    tINPUTSYNC = 351,              /* tINPUTSYNC  */
-    tINT = 352,                    /* tINT  */
-    tINT32 = 353,                  /* tINT32  */
-    tINT3264 = 354,                /* tINT3264  */
-    tINT64 = 355,                  /* tINT64  */
-    tINTERFACE = 356,              /* tINTERFACE  */
-    tLCID = 357,                   /* tLCID  */
-    tLENGTHIS = 358,               /* tLENGTHIS  */
-    tLIBRARY = 359,                /* tLIBRARY  */
-    tLICENSED = 360,               /* tLICENSED  */
-    tLOCAL = 361,                  /* tLOCAL  */
-    tLONG = 362,                   /* tLONG  */
-    tMAYBE = 363,                  /* tMAYBE  */
-    tMESSAGE = 364,                /* tMESSAGE  */
-    tMETHODS = 365,                /* tMETHODS  */
-    tMODULE = 366,                 /* tMODULE  */
-    tNAMESPACE = 367,              /* tNAMESPACE  */
-    tNOCODE = 368,                 /* tNOCODE  */
-    tNONBROWSABLE = 369,           /* tNONBROWSABLE  */
-    tNONCREATABLE = 370,           /* tNONCREATABLE  */
-    tNONEXTENSIBLE = 371,          /* tNONEXTENSIBLE  */
-    tNOTIFY = 372,                 /* tNOTIFY  */
-    tNOTIFYFLAG = 373,             /* tNOTIFYFLAG  */
-    tNULL = 374,                   /* tNULL  */
-    tOBJECT = 375,                 /* tOBJECT  */
-    tODL = 376,                    /* tODL  */
-    tOLEAUTOMATION = 377,          /* tOLEAUTOMATION  */
-    tOPTIMIZE = 378,               /* tOPTIMIZE  */
-    tOPTIONAL = 379,               /* tOPTIONAL  */
-    tOUT = 380,                    /* tOUT  */
-    tPARTIALIGNORE = 381,          /* tPARTIALIGNORE  */
-    tPASCAL = 382,                 /* tPASCAL  */
-    tPOINTERDEFAULT = 383,         /* tPOINTERDEFAULT  */
-    tPRAGMA_WARNING = 384,         /* tPRAGMA_WARNING  */
-    tPROGID = 385,                 /* tPROGID  */
-    tPROPERTIES = 386,             /* tPROPERTIES  */
-    tPROPGET = 387,                /* tPROPGET  */
-    tPROPPUT = 388,                /* tPROPPUT  */
-    tPROPPUTREF = 389,             /* tPROPPUTREF  */
-    tPROXY = 390,                  /* tPROXY  */
-    tPTR = 391,                    /* tPTR  */
-    tPUBLIC = 392,                 /* tPUBLIC  */
-    tRANGE = 393,                  /* tRANGE  */
-    tREADONLY = 394,               /* tREADONLY  */
-    tREF = 395,                    /* tREF  */
-    tREGISTER = 396,               /* tREGISTER  */
-    tREPRESENTAS = 397,            /* tREPRESENTAS  */
-    tREQUESTEDIT = 398,            /* tREQUESTEDIT  */
-    tRESTRICTED = 399,             /* tRESTRICTED  */
-    tRETVAL = 400,                 /* tRETVAL  */
-    tSAFEARRAY = 401,              /* tSAFEARRAY  */
-    tSHORT = 402,                  /* tSHORT  */
-    tSIGNED = 403,                 /* tSIGNED  */
-    tSIZEIS = 404,                 /* tSIZEIS  */
-    tSIZEOF = 405,                 /* tSIZEOF  */
-    tSMALL = 406,                  /* tSMALL  */
-    tSOURCE = 407,                 /* tSOURCE  */
-    tSTATIC = 408,                 /* tSTATIC  */
-    tSTDCALL = 409,                /* tSTDCALL  */
-    tSTRICTCONTEXTHANDLE = 410,    /* tSTRICTCONTEXTHANDLE  */
-    tSTRING = 411,                 /* tSTRING  */
-    tSTRUCT = 412,                 /* tSTRUCT  */
-    tSWITCH = 413,                 /* tSWITCH  */
-    tSWITCHIS = 414,               /* tSWITCHIS  */
-    tSWITCHTYPE = 415,             /* tSWITCHTYPE  */
-    tTHREADING = 416,              /* tTHREADING  */
-    tTRANSMITAS = 417,             /* tTRANSMITAS  */
-    tTRUE = 418,                   /* tTRUE  */
-    tTYPEDEF = 419,                /* tTYPEDEF  */
-    tUIDEFAULT = 420,              /* tUIDEFAULT  */
-    tUNION = 421,                  /* tUNION  */
-    tUNIQUE = 422,                 /* tUNIQUE  */
-    tUNSIGNED = 423,               /* tUNSIGNED  */
-    tUSESGETLASTERROR = 424,       /* tUSESGETLASTERROR  */
-    tUSERMARSHAL = 425,            /* tUSERMARSHAL  */
-    tUUID = 426,                   /* tUUID  */
-    tV1ENUM = 427,                 /* tV1ENUM  */
-    tVARARG = 428,                 /* tVARARG  */
-    tVERSION = 429,                /* tVERSION  */
-    tVIPROGID = 430,               /* tVIPROGID  */
-    tVOID = 431,                   /* tVOID  */
-    tWCHAR = 432,                  /* tWCHAR  */
-    tWIREMARSHAL = 433,            /* tWIREMARSHAL  */
-    tAPARTMENT = 434,              /* tAPARTMENT  */
-    tNEUTRAL = 435,                /* tNEUTRAL  */
-    tSINGLE = 436,                 /* tSINGLE  */
-    tFREE = 437,                   /* tFREE  */
-    tBOTH = 438,                   /* tBOTH  */
-    CAST = 439,                    /* CAST  */
-    PPTR = 440,                    /* PPTR  */
-    POS = 441,                     /* POS  */
-    NEG = 442,                     /* NEG  */
-    ADDRESSOF = 443                /* ADDRESSOF  */
+    aNAMESPACE = 261,              /* aNAMESPACE  */
+    aNUM = 262,                    /* aNUM  */
+    aHEXNUM = 263,                 /* aHEXNUM  */
+    aDOUBLE = 264,                 /* aDOUBLE  */
+    aSTRING = 265,                 /* aSTRING  */
+    aWSTRING = 266,                /* aWSTRING  */
+    aSQSTRING = 267,               /* aSQSTRING  */
+    aUUID = 268,                   /* aUUID  */
+    aEOF = 269,                    /* aEOF  */
+    aACF = 270,                    /* aACF  */
+    SHL = 271,                     /* SHL  */
+    SHR = 272,                     /* SHR  */
+    MEMBERPTR = 273,               /* MEMBERPTR  */
+    EQUALITY = 274,                /* EQUALITY  */
+    INEQUALITY = 275,              /* INEQUALITY  */
+    GREATEREQUAL = 276,            /* GREATEREQUAL  */
+    LESSEQUAL = 277,               /* LESSEQUAL  */
+    LOGICALOR = 278,               /* LOGICALOR  */
+    LOGICALAND = 279,              /* LOGICALAND  */
+    ELLIPSIS = 280,                /* ELLIPSIS  */
+    tAGGREGATABLE = 281,           /* tAGGREGATABLE  */
+    tALLOCATE = 282,               /* tALLOCATE  */
+    tANNOTATION = 283,             /* tANNOTATION  */
+    tAPPOBJECT = 284,              /* tAPPOBJECT  */
+    tASYNC = 285,                  /* tASYNC  */
+    tASYNCUUID = 286,              /* tASYNCUUID  */
+    tAUTOHANDLE = 287,             /* tAUTOHANDLE  */
+    tBINDABLE = 288,               /* tBINDABLE  */
+    tBOOLEAN = 289,                /* tBOOLEAN  */
+    tBROADCAST = 290,              /* tBROADCAST  */
+    tBYTE = 291,                   /* tBYTE  */
+    tBYTECOUNT = 292,              /* tBYTECOUNT  */
+    tCALLAS = 293,                 /* tCALLAS  */
+    tCALLBACK = 294,               /* tCALLBACK  */
+    tCASE = 295,                   /* tCASE  */
+    tCDECL = 296,                  /* tCDECL  */
+    tCHAR = 297,                   /* tCHAR  */
+    tCOCLASS = 298,                /* tCOCLASS  */
+    tCODE = 299,                   /* tCODE  */
+    tCOMMSTATUS = 300,             /* tCOMMSTATUS  */
+    tCONST = 301,                  /* tCONST  */
+    tCONTEXTHANDLE = 302,          /* tCONTEXTHANDLE  */
+    tCONTEXTHANDLENOSERIALIZE = 303, /* tCONTEXTHANDLENOSERIALIZE  */
+    tCONTEXTHANDLESERIALIZE = 304, /* tCONTEXTHANDLESERIALIZE  */
+    tCONTROL = 305,                /* tCONTROL  */
+    tCPPQUOTE = 306,               /* tCPPQUOTE  */
+    tDECODE = 307,                 /* tDECODE  */
+    tDEFAULT = 308,                /* tDEFAULT  */
+    tDEFAULTBIND = 309,            /* tDEFAULTBIND  */
+    tDEFAULTCOLLELEM = 310,        /* tDEFAULTCOLLELEM  */
+    tDEFAULTVALUE = 311,           /* tDEFAULTVALUE  */
+    tDEFAULTVTABLE = 312,          /* tDEFAULTVTABLE  */
+    tDISABLECONSISTENCYCHECK = 313, /* tDISABLECONSISTENCYCHECK  */
+    tDISPLAYBIND = 314,            /* tDISPLAYBIND  */
+    tDISPINTERFACE = 315,          /* tDISPINTERFACE  */
+    tDLLNAME = 316,                /* tDLLNAME  */
+    tDOUBLE = 317,                 /* tDOUBLE  */
+    tDUAL = 318,                   /* tDUAL  */
+    tENABLEALLOCATE = 319,         /* tENABLEALLOCATE  */
+    tENCODE = 320,                 /* tENCODE  */
+    tENDPOINT = 321,               /* tENDPOINT  */
+    tENTRY = 322,                  /* tENTRY  */
+    tENUM = 323,                   /* tENUM  */
+    tERRORSTATUST = 324,           /* tERRORSTATUST  */
+    tEXPLICITHANDLE = 325,         /* tEXPLICITHANDLE  */
+    tEXTERN = 326,                 /* tEXTERN  */
+    tFALSE = 327,                  /* tFALSE  */
+    tFASTCALL = 328,               /* tFASTCALL  */
+    tFAULTSTATUS = 329,            /* tFAULTSTATUS  */
+    tFLOAT = 330,                  /* tFLOAT  */
+    tFORCEALLOCATE = 331,          /* tFORCEALLOCATE  */
+    tHANDLE = 332,                 /* tHANDLE  */
+    tHANDLET = 333,                /* tHANDLET  */
+    tHELPCONTEXT = 334,            /* tHELPCONTEXT  */
+    tHELPFILE = 335,               /* tHELPFILE  */
+    tHELPSTRING = 336,             /* tHELPSTRING  */
+    tHELPSTRINGCONTEXT = 337,      /* tHELPSTRINGCONTEXT  */
+    tHELPSTRINGDLL = 338,          /* tHELPSTRINGDLL  */
+    tHIDDEN = 339,                 /* tHIDDEN  */
+    tHYPER = 340,                  /* tHYPER  */
+    tID = 341,                     /* tID  */
+    tIDEMPOTENT = 342,             /* tIDEMPOTENT  */
+    tIGNORE = 343,                 /* tIGNORE  */
+    tIIDIS = 344,                  /* tIIDIS  */
+    tIMMEDIATEBIND = 345,          /* tIMMEDIATEBIND  */
+    tIMPLICITHANDLE = 346,         /* tIMPLICITHANDLE  */
+    tIMPORT = 347,                 /* tIMPORT  */
+    tIMPORTLIB = 348,              /* tIMPORTLIB  */
+    tIN = 349,                     /* tIN  */
+    tIN_LINE = 350,                /* tIN_LINE  */
+    tINLINE = 351,                 /* tINLINE  */
+    tINPUTSYNC = 352,              /* tINPUTSYNC  */
+    tINT = 353,                    /* tINT  */
+    tINT32 = 354,                  /* tINT32  */
+    tINT3264 = 355,                /* tINT3264  */
+    tINT64 = 356,                  /* tINT64  */
+    tINTERFACE = 357,              /* tINTERFACE  */
+    tLCID = 358,                   /* tLCID  */
+    tLENGTHIS = 359,               /* tLENGTHIS  */
+    tLIBRARY = 360,                /* tLIBRARY  */
+    tLICENSED = 361,               /* tLICENSED  */
+    tLOCAL = 362,                  /* tLOCAL  */
+    tLONG = 363,                   /* tLONG  */
+    tMAYBE = 364,                  /* tMAYBE  */
+    tMESSAGE = 365,                /* tMESSAGE  */
+    tMETHODS = 366,                /* tMETHODS  */
+    tMODULE = 367,                 /* tMODULE  */
+    tNAMESPACE = 368,              /* tNAMESPACE  */
+    tNOCODE = 369,                 /* tNOCODE  */
+    tNONBROWSABLE = 370,           /* tNONBROWSABLE  */
+    tNONCREATABLE = 371,           /* tNONCREATABLE  */
+    tNONEXTENSIBLE = 372,          /* tNONEXTENSIBLE  */
+    tNOTIFY = 373,                 /* tNOTIFY  */
+    tNOTIFYFLAG = 374,             /* tNOTIFYFLAG  */
+    tNULL = 375,                   /* tNULL  */
+    tOBJECT = 376,                 /* tOBJECT  */
+    tODL = 377,                    /* tODL  */
+    tOLEAUTOMATION = 378,          /* tOLEAUTOMATION  */
+    tOPTIMIZE = 379,               /* tOPTIMIZE  */
+    tOPTIONAL = 380,               /* tOPTIONAL  */
+    tOUT = 381,                    /* tOUT  */
+    tPARTIALIGNORE = 382,          /* tPARTIALIGNORE  */
+    tPASCAL = 383,                 /* tPASCAL  */
+    tPOINTERDEFAULT = 384,         /* tPOINTERDEFAULT  */
+    tPRAGMA_WARNING = 385,         /* tPRAGMA_WARNING  */
+    tPROGID = 386,                 /* tPROGID  */
+    tPROPERTIES = 387,             /* tPROPERTIES  */
+    tPROPGET = 388,                /* tPROPGET  */
+    tPROPPUT = 389,                /* tPROPPUT  */
+    tPROPPUTREF = 390,             /* tPROPPUTREF  */
+    tPROXY = 391,                  /* tPROXY  */
+    tPTR = 392,                    /* tPTR  */
+    tPUBLIC = 393,                 /* tPUBLIC  */
+    tRANGE = 394,                  /* tRANGE  */
+    tREADONLY = 395,               /* tREADONLY  */
+    tREF = 396,                    /* tREF  */
+    tREGISTER = 397,               /* tREGISTER  */
+    tREPRESENTAS = 398,            /* tREPRESENTAS  */
+    tREQUESTEDIT = 399,            /* tREQUESTEDIT  */
+    tRESTRICTED = 400,             /* tRESTRICTED  */
+    tRETVAL = 401,                 /* tRETVAL  */
+    tSAFEARRAY = 402,              /* tSAFEARRAY  */
+    tSHORT = 403,                  /* tSHORT  */
+    tSIGNED = 404,                 /* tSIGNED  */
+    tSIZEIS = 405,                 /* tSIZEIS  */
+    tSIZEOF = 406,                 /* tSIZEOF  */
+    tSMALL = 407,                  /* tSMALL  */
+    tSOURCE = 408,                 /* tSOURCE  */
+    tSTATIC = 409,                 /* tSTATIC  */
+    tSTDCALL = 410,                /* tSTDCALL  */
+    tSTRICTCONTEXTHANDLE = 411,    /* tSTRICTCONTEXTHANDLE  */
+    tSTRING = 412,                 /* tSTRING  */
+    tSTRUCT = 413,                 /* tSTRUCT  */
+    tSWITCH = 414,                 /* tSWITCH  */
+    tSWITCHIS = 415,               /* tSWITCHIS  */
+    tSWITCHTYPE = 416,             /* tSWITCHTYPE  */
+    tTHREADING = 417,              /* tTHREADING  */
+    tTRANSMITAS = 418,             /* tTRANSMITAS  */
+    tTRUE = 419,                   /* tTRUE  */
+    tTYPEDEF = 420,                /* tTYPEDEF  */
+    tUIDEFAULT = 421,              /* tUIDEFAULT  */
+    tUNION = 422,                  /* tUNION  */
+    tUNIQUE = 423,                 /* tUNIQUE  */
+    tUNSIGNED = 424,               /* tUNSIGNED  */
+    tUSESGETLASTERROR = 425,       /* tUSESGETLASTERROR  */
+    tUSERMARSHAL = 426,            /* tUSERMARSHAL  */
+    tUUID = 427,                   /* tUUID  */
+    tV1ENUM = 428,                 /* tV1ENUM  */
+    tVARARG = 429,                 /* tVARARG  */
+    tVERSION = 430,                /* tVERSION  */
+    tVIPROGID = 431,               /* tVIPROGID  */
+    tVOID = 432,                   /* tVOID  */
+    tWCHAR = 433,                  /* tWCHAR  */
+    tWIREMARSHAL = 434,            /* tWIREMARSHAL  */
+    tAPARTMENT = 435,              /* tAPARTMENT  */
+    tNEUTRAL = 436,                /* tNEUTRAL  */
+    tSINGLE = 437,                 /* tSINGLE  */
+    tFREE = 438,                   /* tFREE  */
+    tBOTH = 439,                   /* tBOTH  */
+    CAST = 440,                    /* CAST  */
+    PPTR = 441,                    /* PPTR  */
+    POS = 442,                     /* POS  */
+    NEG = 443,                     /* NEG  */
+    ADDRESSOF = 444                /* ADDRESSOF  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
@@ -248,7 +249,7 @@
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 129 "parser.y"
+#line 132 "parser.y"
 
 	attr_t *attr;
 	attr_list_t *attr_list;
@@ -277,7 +278,7 @@
 	enum type_qualifier type_qualifier;
 	enum function_specifier function_specifier;
 
-#line 281 "parser.tab.h"
+#line 282 "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 3ef8d89..7d5aaeb 100644
--- a/mingw-w64-tools/widl/src/parser.y
+++ b/mingw-w64-tools/widl/src/parser.y
@@ -81,6 +81,8 @@
 
 static void push_namespace(const char *name);
 static void pop_namespace(const char *name);
+static void init_lookup_namespace(const char *name);
+static void push_lookup_namespace(const char *name);
 
 static void check_arg_attrs(const var_t *arg);
 static void check_statements(const statement_list_t *stmts, int is_inside_library);
@@ -122,6 +124,7 @@
 };
 
 static struct namespace *current_namespace = &global_namespace;
+static struct namespace *lookup_namespace = &global_namespace;
 
 static typelib_t *current_typelib;
 
@@ -156,7 +159,7 @@
 }
 
 %token <str> aIDENTIFIER aPRAGMA
-%token <str> aKNOWNTYPE
+%token <str> aKNOWNTYPE aNAMESPACE
 %token <num> aNUM aHEXNUM
 %token <dbl> aDOUBLE
 %token <str> aSTRING aWSTRING aSQSTRING
@@ -271,7 +274,7 @@
 %type <str> namespacedef
 %type <type> base_type int_std
 %type <type> enumdef structdef uniondef typedecl
-%type <type> type
+%type <type> type qualified_seq qualified_type
 %type <ifref> coclass_int
 %type <ifref_list> coclass_ints
 %type <var> arg ne_union_field union_field s_field case enum declaration
@@ -817,6 +820,16 @@
 	| tINT3264				{ $$ = type_new_int(TYPE_BASIC_INT3264, 0); }
 	;
 
+qualified_seq:
+      aKNOWNTYPE      { $$ = find_type_or_error($1, 0); }
+    | aIDENTIFIER '.' { push_lookup_namespace($1); } qualified_seq { $$ = $4; }
+    ;
+
+qualified_type:
+      aKNOWNTYPE     { $$ = find_type_or_error($1, 0); }
+    | aNAMESPACE '.' { init_lookup_namespace($1); } qualified_seq { $$ = $4; }
+    ;
+
 coclass:  tCOCLASS aIDENTIFIER			{ $$ = type_new_coclass($2); }
 	| tCOCLASS aKNOWNTYPE			{ $$ = find_type($2, NULL, 0);
 						  if (type_get_type_detect_alias($$) != TYPE_COCLASS)
@@ -837,6 +850,7 @@
 	;
 
 namespacedef: tNAMESPACE aIDENTIFIER		{ $$ = $2; }
+	| tNAMESPACE aNAMESPACE                 { $$ = $2; }
 	;
 
 coclass_ints:					{ $$ = NULL; }
@@ -881,7 +895,7 @@
 	;
 
 inherit:					{ $$ = NULL; }
-	| ':' aKNOWNTYPE			{ $$ = find_type_or_error2($2, 0); }
+	| ':' qualified_type                    { $$ = $2; }
 	;
 
 interface: tINTERFACE aIDENTIFIER		{ $$ = get_type(TYPE_INTERFACE, $2, current_namespace, 0); }
@@ -1096,7 +1110,7 @@
 	;
 
 type:	  tVOID					{ $$ = type_new_void(); }
-	| aKNOWNTYPE				{ $$ = find_type_or_error($1, 0); }
+	| qualified_type                        { $$ = $1; }
 	| base_type				{ $$ = $1; }
 	| enumdef				{ $$ = $1; }
 	| tENUM aIDENTIFIER			{ $$ = type_new_enum($2, current_namespace, FALSE, NULL); }
@@ -1848,6 +1862,20 @@
   current_namespace = current_namespace->parent;
 }
 
+static void init_lookup_namespace(const char *name)
+{
+    if (!(lookup_namespace = find_sub_namespace(&global_namespace, name)))
+        error_loc("namespace '%s' not found\n", name);
+}
+
+static void push_lookup_namespace(const char *name)
+{
+    struct namespace *namespace;
+    if (!(namespace = find_sub_namespace(lookup_namespace, name)))
+        error_loc("namespace '%s' not found\n", name);
+    lookup_namespace = namespace;
+}
+
 struct rtype {
   const char *name;
   type_t *type;
@@ -1959,12 +1987,14 @@
 
 static type_t *find_type_or_error(const char *name, int t)
 {
-  type_t *type = find_type(name, NULL, t);
-  if (!type) {
-    error_loc("type '%s' not found\n", name);
-    return NULL;
-  }
-  return type;
+    type_t *type;
+    if (!(type = find_type(name, current_namespace, t)) &&
+        !(type = find_type(name, lookup_namespace, t)))
+    {
+        error_loc("type '%s' not found\n", name);
+        return NULL;
+    }
+    return type;
 }
 
 static type_t *find_type_or_error2(char *name, int t)
@@ -1976,7 +2006,15 @@
 
 int is_type(const char *name)
 {
-  return find_type(name, current_namespace, 0) != NULL;
+    return find_type(name, current_namespace, 0) != NULL ||
+           find_type(name, lookup_namespace, 0) != NULL;
+}
+
+int is_namespace(const char *name)
+{
+    if (!winrt_mode) return 0;
+    return find_sub_namespace(current_namespace, name) != NULL ||
+           find_sub_namespace(&global_namespace, name) != NULL;
 }
 
 type_t *get_type(enum type_type type, char *name, struct namespace *namespace, int t)
diff --git a/mingw-w64-tools/widl/src/parser.yy.c b/mingw-w64-tools/widl/src/parser.yy.c
index 2aaf3c2..3f8271e 100644
--- a/mingw-w64-tools/widl/src/parser.yy.c
+++ b/mingw-w64-tools/widl/src/parser.yy.c
@@ -2843,7 +2843,7 @@
 		return kwp->token;
 	}
 	parser_lval.str = xstrdup(kw);
-	return is_type(kw) ? aKNOWNTYPE : aIDENTIFIER;
+	return is_type(kw) ? aKNOWNTYPE : is_namespace(kw) ? aNAMESPACE : aIDENTIFIER;
 }
 
 static int attr_token(const char *kw)
diff --git a/mingw-w64-tools/widl/src/proxy.c b/mingw-w64-tools/widl/src/proxy.c
index d7788e1..457f29a 100644
--- a/mingw-w64-tools/widl/src/proxy.c
+++ b/mingw-w64-tools/widl/src/proxy.c
@@ -204,7 +204,7 @@
       if (get_stub_mode() == MODE_Oif && !is_callas( func->attrs )) return;
       write_type_decl_left(proxy, &retval->declspec);
       print_proxy( " %s %s_%s_Proxy(\n", callconv, iface->name, get_name(func));
-      write_args(proxy, args, iface->name, 1, TRUE);
+      write_args(proxy, args, iface->name, 1, TRUE, NAME_DEFAULT);
       print_proxy( ")\n");
       write_client_call_routine( proxy, iface, func, "Object", proc_offset );
       return;
@@ -221,7 +221,7 @@
 
   write_type_decl_left(proxy, &retval->declspec);
   print_proxy( " %s %s_%s_Proxy(\n", callconv, iface->name, get_name(func));
-  write_args(proxy, args, iface->name, 1, TRUE);
+  write_args(proxy, args, iface->name, 1, TRUE, NAME_DEFAULT);
   print_proxy( ")\n");
   print_proxy( "{\n");
   indent ++;
diff --git a/mingw-w64-tools/widl/src/wpp/ppl.l b/mingw-w64-tools/widl/src/wpp/ppl.l
index a681243..566cf2f 100644
--- a/mingw-w64-tools/widl/src/wpp/ppl.l
+++ b/mingw-w64-tools/widl/src/wpp/ppl.l
@@ -522,7 +522,7 @@
 <pp_macro>{ws}+			;
 <pp_macro>{cident}		ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT;
 <pp_macro>,			return ',';
-<pp_macro>"..."			return tELIPSIS;
+<pp_macro>"..."			return tELLIPSIS;
 <pp_macro>(\\\r?)|(\n)|(.)|(\.\.?)	ppy_error("Argument identifier expected");
 <pp_macro>\\\r?\n		newline(0);
 
diff --git a/mingw-w64-tools/widl/src/wpp/ppl.yy.c b/mingw-w64-tools/widl/src/wpp/ppl.yy.c
index aff35a1..28e05db 100644
--- a/mingw-w64-tools/widl/src/wpp/ppl.yy.c
+++ b/mingw-w64-tools/widl/src/wpp/ppl.yy.c
@@ -2466,7 +2466,7 @@
 case 91:
 YY_RULE_SETUP
 #line 526 "ppl.l"
-return tELIPSIS;
+return tELLIPSIS;
 	YY_BREAK
 case 92:
 /* rule 92 can match eol */
diff --git a/mingw-w64-tools/widl/src/wpp/ppy.tab.c b/mingw-w64-tools/widl/src/wpp/ppy.tab.c
index 122ddaa..bf94192 100644
--- a/mingw-w64-tools/widl/src/wpp/ppy.tab.c
+++ b/mingw-w64-tools/widl/src/wpp/ppy.tab.c
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.6.2.  */
+/* A Bison parser, made by GNU Bison 3.6.4.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
@@ -49,7 +49,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.6.2"
+#define YYBISON_VERSION "3.6.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -230,7 +230,7 @@
     tUNDEF = 274,                  /* tUNDEF  */
     tMACROEND = 275,               /* tMACROEND  */
     tCONCAT = 276,                 /* tCONCAT  */
-    tELIPSIS = 277,                /* tELIPSIS  */
+    tELLIPSIS = 277,               /* tELLIPSIS  */
     tSTRINGIZE = 278,              /* tSTRINGIZE  */
     tIDENT = 279,                  /* tIDENT  */
     tLITERAL = 280,                /* tLITERAL  */
@@ -316,7 +316,7 @@
   YYSYMBOL_tUNDEF = 19,                    /* tUNDEF  */
   YYSYMBOL_tMACROEND = 20,                 /* tMACROEND  */
   YYSYMBOL_tCONCAT = 21,                   /* tCONCAT  */
-  YYSYMBOL_tELIPSIS = 22,                  /* tELIPSIS  */
+  YYSYMBOL_tELLIPSIS = 22,                 /* tELLIPSIS  */
   YYSYMBOL_tSTRINGIZE = 23,                /* tSTRINGIZE  */
   YYSYMBOL_tIDENT = 24,                    /* tIDENT  */
   YYSYMBOL_tLITERAL = 25,                  /* tLITERAL  */
@@ -737,7 +737,7 @@
 };
 
 #if YYDEBUG
-  /* YYRLINEYYN -- Source line where rule number YYN was defined.  */
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
        0,   181,   181,   182,   186,   187,   188,   189,   190,   210,
@@ -767,7 +767,7 @@
   "\"end of file\"", "error", "\"invalid token\"", "tRCINCLUDE", "tIF",
   "tIFDEF", "tIFNDEF", "tELSE", "tELIF", "tENDIF", "tDEFINED", "tNL",
   "tINCLUDE", "tLINE", "tGCCLINE", "tERROR", "tWARNING", "tPRAGMA",
-  "tPPIDENT", "tUNDEF", "tMACROEND", "tCONCAT", "tELIPSIS", "tSTRINGIZE",
+  "tPPIDENT", "tUNDEF", "tMACROEND", "tCONCAT", "tELLIPSIS", "tSTRINGIZE",
   "tIDENT", "tLITERAL", "tMACRO", "tDEFINE", "tDQSTRING", "tSQSTRING",
   "tIQSTRING", "tUINT", "tSINT", "tULONG", "tSLONG", "tULONGLONG",
   "tSLONGLONG", "tRCINCLUDEPATH", "'?'", "':'", "tLOGOR", "tLOGAND", "'|'",
@@ -810,7 +810,7 @@
 #define yytable_value_is_error(Yyn) \
   0
 
-  /* YYPACTSTATE-NUM -- Index in YYTABLE of the portion describing
+  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
@@ -832,7 +832,7 @@
      -27,   291,   -27
 };
 
-  /* YYDEFACTSTATE-NUM -- Default reduction number in state STATE-NUM.
+  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
      Performed when YYTABLE does not specify something else to do.  Zero
      means the default is an error.  */
 static const yytype_int8 yydefact[] =
@@ -855,21 +855,21 @@
       19,     0,    20
 };
 
-  /* YYPGOTONTERM-NUM.  */
+  /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
      -27,   -27,   -27,   -11,   -27,   -27,   -27,   -27,   -27,   -27,
      -27,   163,    -8
 };
 
-  /* YYDEFGOTONTERM-NUM.  */
+  /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
       -1,     1,    20,    50,    51,    56,   100,   101,   102,   139,
      140,   141,    36
 };
 
-  /* YYTABLEYYPACT[STATE-NUM] -- What to do in state STATE-NUM.  If
+  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
      positive, shift that token.  If negative, reduce the rule whose
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint8 yytable[] =
@@ -942,7 +942,7 @@
       24,    11,    11,   140
 };
 
-  /* YYSTOSSTATE-NUM -- The (internal number of the) accessing
+  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_int8 yystos[] =
 {
@@ -964,7 +964,7 @@
       11,    32,    11
 };
 
-  /* YYR1YYN -- Symbol number of symbol that rule YYN derives.  */
+  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_int8 yyr1[] =
 {
        0,    62,    63,    63,    64,    64,    64,    64,    64,    64,
@@ -978,7 +978,7 @@
       74,    74,    74,    74,    74
 };
 
-  /* YYR2YYN -- Number of symbols on the right hand side of rule YYN.  */
+  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
 static const yytype_int8 yyr2[] =
 {
        0,     2,     0,     2,     3,     3,     3,     3,     3,     3,
diff --git a/mingw-w64-tools/widl/src/wpp/ppy.tab.h b/mingw-w64-tools/widl/src/wpp/ppy.tab.h
index 7c6970e..8c00172 100644
--- a/mingw-w64-tools/widl/src/wpp/ppy.tab.h
+++ b/mingw-w64-tools/widl/src/wpp/ppy.tab.h
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.6.2.  */
+/* A Bison parser, made by GNU Bison 3.6.4.  */
 
 /* Bison interface for Yacc-like parsers in C
 
@@ -73,7 +73,7 @@
     tUNDEF = 274,                  /* tUNDEF  */
     tMACROEND = 275,               /* tMACROEND  */
     tCONCAT = 276,                 /* tCONCAT  */
-    tELIPSIS = 277,                /* tELIPSIS  */
+    tELLIPSIS = 277,               /* tELLIPSIS  */
     tSTRINGIZE = 278,              /* tSTRINGIZE  */
     tIDENT = 279,                  /* tIDENT  */
     tLITERAL = 280,                /* tLITERAL  */
diff --git a/mingw-w64-tools/widl/src/wpp/ppy.y b/mingw-w64-tools/widl/src/wpp/ppy.y
index eb4f15a..a6c0957 100644
--- a/mingw-w64-tools/widl/src/wpp/ppy.y
+++ b/mingw-w64-tools/widl/src/wpp/ppy.y
@@ -140,7 +140,7 @@
 %token tRCINCLUDE
 %token tIF tIFDEF tIFNDEF tELSE tELIF tENDIF tDEFINED tNL
 %token tINCLUDE tLINE tGCCLINE tERROR tWARNING tPRAGMA tPPIDENT
-%token tUNDEF tMACROEND tCONCAT tELIPSIS tSTRINGIZE
+%token tUNDEF tMACROEND tCONCAT tELLIPSIS tSTRINGIZE
 %token <cptr> tIDENT tLITERAL tMACRO tDEFINE
 %token <cptr> tDQSTRING tSQSTRING tIQSTRING
 %token <uint> tUINT
@@ -333,7 +333,7 @@
 	;
 
 emargs	: margs			{ $$ = $1; }
-	| margs ',' tELIPSIS	{ $$ = add_new_marg(NULL, arg_list); nmacro_args *= -1; }
+	| margs ',' tELLIPSIS	{ $$ = add_new_marg(NULL, arg_list); nmacro_args *= -1; }
 	;
 
 margs	: margs ',' tIDENT	{ $$ = add_new_marg($3, arg_single); }