diff --git a/mingw-w64-headers/Makefile.am b/mingw-w64-headers/Makefile.am
index 65413cb..e32aea6 100644
--- a/mingw-w64-headers/Makefile.am
+++ b/mingw-w64-headers/Makefile.am
@@ -75,6 +75,7 @@
   include/alg.idl \
   include/amstream.idl \
   include/amvideo.idl \
+  include/asyncinfo.idl \
   include/audioclient.idl \
   include/audioendpoints.idl \
   include/audiopolicy.idl \
@@ -131,6 +132,7 @@
   include/dxva2api.idl \
   include/dxvahd.idl \
   include/endpointvolume.idl \
+  include/eventtoken.idl \
   include/evr.idl \
   include/exdisp.idl \
   include/filter.idl \
diff --git a/mingw-w64-headers/Makefile.in b/mingw-w64-headers/Makefile.in
index 06492b8..63eccaf 100644
--- a/mingw-w64-headers/Makefile.in
+++ b/mingw-w64-headers/Makefile.in
@@ -377,6 +377,7 @@
 @HAVE_WIDL_TRUE@  include/alg.idl \
 @HAVE_WIDL_TRUE@  include/amstream.idl \
 @HAVE_WIDL_TRUE@  include/amvideo.idl \
+@HAVE_WIDL_TRUE@  include/asyncinfo.idl \
 @HAVE_WIDL_TRUE@  include/audioclient.idl \
 @HAVE_WIDL_TRUE@  include/audioendpoints.idl \
 @HAVE_WIDL_TRUE@  include/audiopolicy.idl \
@@ -433,6 +434,7 @@
 @HAVE_WIDL_TRUE@  include/dxva2api.idl \
 @HAVE_WIDL_TRUE@  include/dxvahd.idl \
 @HAVE_WIDL_TRUE@  include/endpointvolume.idl \
+@HAVE_WIDL_TRUE@  include/eventtoken.idl \
 @HAVE_WIDL_TRUE@  include/evr.idl \
 @HAVE_WIDL_TRUE@  include/exdisp.idl \
 @HAVE_WIDL_TRUE@  include/filter.idl \
diff --git a/mingw-w64-headers/include/asyncinfo.h b/mingw-w64-headers/include/asyncinfo.h
new file mode 100644
index 0000000..7bfe823
--- /dev/null
+++ b/mingw-w64-headers/include/asyncinfo.h
@@ -0,0 +1,200 @@
+/*** Autogenerated by WIDL 6.4 from include/asyncinfo.idl - Do not edit ***/
+
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __asyncinfo_h__
+#define __asyncinfo_h__
+
+/* Forward declarations */
+
+#ifndef __IAsyncInfo_FWD_DEFINED__
+#define __IAsyncInfo_FWD_DEFINED__
+typedef interface IAsyncInfo IAsyncInfo;
+#ifdef __cplusplus
+namespace ABI {
+    interface IAsyncInfo;
+}
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
+
+#include <inspectable.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum AsyncStatus {
+    Started = 0,
+    Completed = 1,
+    Canceled = 2,
+    Error = 3
+} AsyncStatus;
+/*****************************************************************************
+ * IAsyncInfo interface
+ */
+#ifndef __IAsyncInfo_INTERFACE_DEFINED__
+#define __IAsyncInfo_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAsyncInfo, 0x00000036, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("00000036-0000-0000-c000-000000000046")
+IAsyncInfo : public IInspectable
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Id(
+        UINT32 *id) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Status(
+        AsyncStatus *status) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ErrorCode(
+        HRESULT *error_code) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Cancel(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Close(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IAsyncInfo, 0x00000036, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46)
+#endif
+#else
+typedef struct IAsyncInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAsyncInfo *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAsyncInfo *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAsyncInfo *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        IAsyncInfo *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        IAsyncInfo *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        IAsyncInfo *This,
+        TrustLevel *trustLevel);
+
+    /*** IAsyncInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Id)(
+        IAsyncInfo *This,
+        UINT32 *id);
+
+    HRESULT (STDMETHODCALLTYPE *get_Status)(
+        IAsyncInfo *This,
+        AsyncStatus *status);
+
+    HRESULT (STDMETHODCALLTYPE *get_ErrorCode)(
+        IAsyncInfo *This,
+        HRESULT *error_code);
+
+    HRESULT (STDMETHODCALLTYPE *Cancel)(
+        IAsyncInfo *This);
+
+    HRESULT (STDMETHODCALLTYPE *Close)(
+        IAsyncInfo *This);
+
+    END_INTERFACE
+} IAsyncInfoVtbl;
+
+interface IAsyncInfo {
+    CONST_VTBL IAsyncInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IAsyncInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAsyncInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAsyncInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define IAsyncInfo_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define IAsyncInfo_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define IAsyncInfo_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IAsyncInfo methods ***/
+#define IAsyncInfo_get_Id(This,id) (This)->lpVtbl->get_Id(This,id)
+#define IAsyncInfo_get_Status(This,status) (This)->lpVtbl->get_Status(This,status)
+#define IAsyncInfo_get_ErrorCode(This,error_code) (This)->lpVtbl->get_ErrorCode(This,error_code)
+#define IAsyncInfo_Cancel(This) (This)->lpVtbl->Cancel(This)
+#define IAsyncInfo_Close(This) (This)->lpVtbl->Close(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IAsyncInfo_QueryInterface(IAsyncInfo* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IAsyncInfo_AddRef(IAsyncInfo* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IAsyncInfo_Release(IAsyncInfo* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static FORCEINLINE HRESULT IAsyncInfo_GetIids(IAsyncInfo* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static FORCEINLINE HRESULT IAsyncInfo_GetRuntimeClassName(IAsyncInfo* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static FORCEINLINE HRESULT IAsyncInfo_GetTrustLevel(IAsyncInfo* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IAsyncInfo methods ***/
+static FORCEINLINE HRESULT IAsyncInfo_get_Id(IAsyncInfo* This,UINT32 *id) {
+    return This->lpVtbl->get_Id(This,id);
+}
+static FORCEINLINE HRESULT IAsyncInfo_get_Status(IAsyncInfo* This,AsyncStatus *status) {
+    return This->lpVtbl->get_Status(This,status);
+}
+static FORCEINLINE HRESULT IAsyncInfo_get_ErrorCode(IAsyncInfo* This,HRESULT *error_code) {
+    return This->lpVtbl->get_ErrorCode(This,error_code);
+}
+static FORCEINLINE HRESULT IAsyncInfo_Cancel(IAsyncInfo* This) {
+    return This->lpVtbl->Cancel(This);
+}
+static FORCEINLINE HRESULT IAsyncInfo_Close(IAsyncInfo* This) {
+    return This->lpVtbl->Close(This);
+}
+#endif
+#endif
+
+#endif
+
+#endif  /* __IAsyncInfo_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __asyncinfo_h__ */
diff --git a/mingw-w64-headers/include/asyncinfo.idl b/mingw-w64-headers/include/asyncinfo.idl
new file mode 100644
index 0000000..45ab9f5
--- /dev/null
+++ b/mingw-w64-headers/include/asyncinfo.idl
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2021 Rémi Bernon for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifdef __WIDL__
+#pragma winrt ns_prefix
+#endif
+
+import "inspectable.idl";
+
+typedef [v1_enum] enum AsyncStatus
+{
+    Started = 0,
+    Completed,
+    Canceled,
+    Error,
+} AsyncStatus;
+
+[
+    object,
+    uuid(00000036-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IAsyncInfo : IInspectable
+{
+    [propget] HRESULT Id([out, retval] unsigned __int32 *id);
+    [propget] HRESULT Status([out, retval] AsyncStatus *status);
+    [propget] HRESULT ErrorCode([out, retval] HRESULT *error_code);
+    HRESULT Cancel();
+    HRESULT Close();
+}
diff --git a/mingw-w64-headers/include/eventtoken.h b/mingw-w64-headers/include/eventtoken.h
new file mode 100644
index 0000000..51541c0
--- /dev/null
+++ b/mingw-w64-headers/include/eventtoken.h
@@ -0,0 +1,41 @@
+/*** Autogenerated by WIDL 6.4 from include/eventtoken.idl - Do not edit ***/
+
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __eventtoken_h__
+#define __eventtoken_h__
+
+/* Forward declarations */
+
+/* Headers for imported files */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct EventRegistrationToken {
+    INT64 value;
+};
+typedef struct EventRegistrationToken EventRegistrationToken;
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __eventtoken_h__ */
diff --git a/mingw-w64-headers/include/eventtoken.idl b/mingw-w64-headers/include/eventtoken.idl
new file mode 100644
index 0000000..0d27615
--- /dev/null
+++ b/mingw-w64-headers/include/eventtoken.idl
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2021 Rémi Bernon for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+struct EventRegistrationToken
+{
+    __int64 value;
+};
+typedef struct EventRegistrationToken EventRegistrationToken;
diff --git a/mingw-w64-headers/include/windows.foundation.collections.h b/mingw-w64-headers/include/windows.foundation.collections.h
index 59ed27a..a51dd0a 100644
--- a/mingw-w64-headers/include/windows.foundation.collections.h
+++ b/mingw-w64-headers/include/windows.foundation.collections.h
@@ -36,6 +36,48 @@
 namespace ABI {
     namespace Windows {
         namespace Foundation {
+            template <class TResult>
+            struct IAsyncOperationCompletedHandler_impl;
+
+            template <class TResult>
+            struct IAsyncOperationCompletedHandler : IAsyncOperationCompletedHandler_impl<TResult> {};
+        }
+    }
+}
+#endif
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template <class TResult>
+            struct IAsyncOperation_impl;
+
+            template <class TResult>
+            struct IAsyncOperation : IAsyncOperation_impl<TResult> {};
+        }
+    }
+}
+#endif
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template <class TSender, class TArgs>
+            struct ITypedEventHandler_impl;
+
+            template <class TSender, class TArgs>
+            struct ITypedEventHandler : ITypedEventHandler_impl<TSender, TArgs> {};
+        }
+    }
+}
+#endif
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
             namespace Collections {
                 template <class T>
                 struct IIterator_impl;
@@ -83,6 +125,7 @@
 /* Headers for imported files */
 
 #include <inspectable.h>
+#include <asyncinfo.h>
 #include <windowscontracts.h>
 
 #ifdef __cplusplus
@@ -126,6 +169,74 @@
 namespace ABI {
     namespace Windows {
         namespace Foundation {
+            template <class TResult>
+            struct IAsyncOperationCompletedHandler_impl : IUnknown
+            {
+            private:
+                typedef typename Windows::Foundation::Internal::GetAbiType<TResult>::type     TResult_abi;
+                typedef typename Windows::Foundation::Internal::GetLogicalType<TResult>::type TResult_logical;
+            public:
+                typedef TResult TResult_complex;
+                virtual HRESULT STDMETHODCALLTYPE Invoke(IAsyncOperation<TResult_logical> *info,AsyncStatus status) = 0;
+            };
+        }
+    }
+}
+extern "C" {
+#endif
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template <class TResult>
+            struct IAsyncOperation_impl : IInspectable
+            {
+            private:
+                typedef typename Windows::Foundation::Internal::GetAbiType<TResult>::type     TResult_abi;
+                typedef typename Windows::Foundation::Internal::GetLogicalType<TResult>::type TResult_logical;
+            public:
+                typedef TResult TResult_complex;
+                virtual HRESULT STDMETHODCALLTYPE put_Completed(IAsyncOperationCompletedHandler<TResult_logical> *handler) = 0;
+                virtual HRESULT STDMETHODCALLTYPE get_Completed(IAsyncOperationCompletedHandler<TResult_logical> **handler) = 0;
+                virtual HRESULT STDMETHODCALLTYPE GetResults(TResult_abi **results) = 0;
+            };
+        }
+    }
+}
+extern "C" {
+#endif
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template <class TSender, class TArgs>
+            struct ITypedEventHandler_impl : IUnknown
+            {
+            private:
+                typedef typename Windows::Foundation::Internal::GetAbiType<TSender>::type     TSender_abi;
+                typedef typename Windows::Foundation::Internal::GetLogicalType<TSender>::type TSender_logical;
+                typedef typename Windows::Foundation::Internal::GetAbiType<TArgs>::type     TArgs_abi;
+                typedef typename Windows::Foundation::Internal::GetLogicalType<TArgs>::type TArgs_logical;
+            public:
+                typedef TSender TSender_complex;
+                typedef TArgs TArgs_complex;
+                virtual HRESULT STDMETHODCALLTYPE Invoke(TSender_abi sender,TArgs_abi args) = 0;
+            };
+        }
+    }
+}
+extern "C" {
+#endif
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
             namespace Collections {
                 template <class T>
                 struct IIterator_impl : IInspectable
diff --git a/mingw-w64-headers/include/windows.foundation.collections.idl b/mingw-w64-headers/include/windows.foundation.collections.idl
index ed05016..50a678e 100644
--- a/mingw-w64-headers/include/windows.foundation.collections.idl
+++ b/mingw-w64-headers/include/windows.foundation.collections.idl
@@ -21,7 +21,7 @@
 #endif
 
 import "inspectable.idl";
-/* import "asyncinfo.idl"; */
+import "asyncinfo.idl";
 import "windowscontracts.idl";
 /* import "eventtoken.idl"; */
 
@@ -47,6 +47,31 @@
         ]
         delegate HRESULT EventHandler<T>([in] IInspectable *sender, [in] T args);
 
+        interface IAsyncOperation<TResult>;
+
+        [
+            contract(Windows.Foundation.FoundationContract, 1.0),
+            uuid(fcdcf02c-e5d8-4478-915a-4d90b74b83a5)
+        ]
+        delegate HRESULT AsyncOperationCompletedHandler<TResult>([in] IAsyncOperation<TResult> *info, [in] AsyncStatus status);
+
+        [
+            contract(Windows.Foundation.FoundationContract, 1.0),
+            uuid(9fc2b0bb-e446-44e2-aa61-9cab8f636af2)
+        ]
+        interface IAsyncOperation<TResult> : IInspectable
+        {
+            [propput] HRESULT Completed([in] AsyncOperationCompletedHandler<TResult> *handler);
+            [propget] HRESULT Completed([out, retval] AsyncOperationCompletedHandler<TResult> **handler);
+            HRESULT GetResults([out, retval] TResult **results);
+        }
+
+        [
+            contract(Windows.Foundation.FoundationContract, 1.0),
+            uuid(9de1c534-6ae1-11e0-84e1-18a905bcc53f)
+        ]
+        delegate HRESULT TypedEventHandler<TSender, TArgs>([in] TSender sender, [in] TArgs args);
+
         namespace Collections
         {
             [
diff --git a/mingw-w64-headers/include/windows.foundation.h b/mingw-w64-headers/include/windows.foundation.h
index 90dc859..4a2c5b7 100644
--- a/mingw-w64-headers/include/windows.foundation.h
+++ b/mingw-w64-headers/include/windows.foundation.h
@@ -18,69 +18,41 @@
 
 /* Forward declarations */
 
-#ifndef ____x_ABI_CWindows_CFoundation_CIAsyncInfo_FWD_DEFINED__
-#define ____x_ABI_CWindows_CFoundation_CIAsyncInfo_FWD_DEFINED__
-typedef interface __x_ABI_CWindows_CFoundation_CIAsyncInfo __x_ABI_CWindows_CFoundation_CIAsyncInfo;
+#ifndef ____x_ABI_CWindows_CFoundation_CIStringable_FWD_DEFINED__
+#define ____x_ABI_CWindows_CFoundation_CIStringable_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CFoundation_CIStringable __x_ABI_CWindows_CFoundation_CIStringable;
 #ifdef __cplusplus
-#define __x_ABI_CWindows_CFoundation_CIAsyncInfo ABI::Windows::Foundation::IAsyncInfo
+#define __x_ABI_CWindows_CFoundation_CIStringable ABI::Windows::Foundation::IStringable
 namespace ABI {
     namespace Windows {
         namespace Foundation {
-            interface IAsyncInfo;
+            interface IStringable;
         }
     }
 }
 #endif /* __cplusplus */
 #endif
 
-#ifndef ____x_ABI_CWindows_CFoundation_CIASyncAction_FWD_DEFINED__
-#define ____x_ABI_CWindows_CFoundation_CIASyncAction_FWD_DEFINED__
-typedef interface __x_ABI_CWindows_CFoundation_CIASyncAction __x_ABI_CWindows_CFoundation_CIASyncAction;
+#ifndef ____FIAsyncOperationCompletedHandler_1_boolean_FWD_DEFINED__
+#define ____FIAsyncOperationCompletedHandler_1_boolean_FWD_DEFINED__
+typedef interface __FIAsyncOperationCompletedHandler_1_boolean __FIAsyncOperationCompletedHandler_1_boolean;
 #ifdef __cplusplus
-#define __x_ABI_CWindows_CFoundation_CIASyncAction ABI::Windows::Foundation::IASyncAction
-namespace ABI {
-    namespace Windows {
-        namespace Foundation {
-            interface IASyncAction;
-        }
-    }
-}
+#define __FIAsyncOperationCompletedHandler_1_boolean ABI::Windows::Foundation::IAsyncOperationCompletedHandler<boolean >
 #endif /* __cplusplus */
 #endif
 
-#ifndef ____x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_FWD_DEFINED__
-#define ____x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_FWD_DEFINED__
-typedef interface __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler;
+#ifndef ____FIAsyncOperation_1_boolean_FWD_DEFINED__
+#define ____FIAsyncOperation_1_boolean_FWD_DEFINED__
+typedef interface __FIAsyncOperation_1_boolean __FIAsyncOperation_1_boolean;
 #ifdef __cplusplus
-#define __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler ABI::Windows::Foundation::AsyncActionCompletedHandler
-namespace ABI {
-    namespace Windows {
-        namespace Foundation {
-            interface AsyncActionCompletedHandler;
-        }
-    }
-}
-#endif /* __cplusplus */
-#endif
-
-#ifndef ____x_ABI_CWindows_CFoundation_CIAsyncOperation_FWD_DEFINED__
-#define ____x_ABI_CWindows_CFoundation_CIAsyncOperation_FWD_DEFINED__
-typedef interface __x_ABI_CWindows_CFoundation_CIAsyncOperation __x_ABI_CWindows_CFoundation_CIAsyncOperation;
-#ifdef __cplusplus
-#define __x_ABI_CWindows_CFoundation_CIAsyncOperation ABI::Windows::Foundation::IAsyncOperation
-namespace ABI {
-    namespace Windows {
-        namespace Foundation {
-            interface IAsyncOperation;
-        }
-    }
-}
+#define __FIAsyncOperation_1_boolean ABI::Windows::Foundation::IAsyncOperation<boolean >
 #endif /* __cplusplus */
 #endif
 
 /* Headers for imported files */
 
 #include <inspectable.h>
+#include <asyncinfo.h>
 #include <windowscontracts.h>
 #include <windows.foundation.collections.h>
 
@@ -88,785 +60,606 @@
 extern "C" {
 #endif
 
-#ifndef ____x_ABI_CWindows_CFoundation_CIAsyncInfo_FWD_DEFINED__
-#define ____x_ABI_CWindows_CFoundation_CIAsyncInfo_FWD_DEFINED__
-typedef interface __x_ABI_CWindows_CFoundation_CIAsyncInfo __x_ABI_CWindows_CFoundation_CIAsyncInfo;
-#ifdef __cplusplus
-#define __x_ABI_CWindows_CFoundation_CIAsyncInfo ABI::Windows::Foundation::IAsyncInfo
-namespace ABI {
-    namespace Windows {
-        namespace Foundation {
-            interface IAsyncInfo;
-        }
-    }
-}
-#endif /* __cplusplus */
-#endif
-
-#ifndef ____x_ABI_CWindows_CFoundation_CIAsyncAction_FWD_DEFINED__
-#define ____x_ABI_CWindows_CFoundation_CIAsyncAction_FWD_DEFINED__
-typedef interface __x_ABI_CWindows_CFoundation_CIAsyncAction __x_ABI_CWindows_CFoundation_CIAsyncAction;
-#ifdef __cplusplus
-#define __x_ABI_CWindows_CFoundation_CIAsyncAction ABI::Windows::Foundation::IAsyncAction
-namespace ABI {
-    namespace Windows {
-        namespace Foundation {
-            interface IAsyncAction;
-        }
-    }
-}
-#endif /* __cplusplus */
-#endif
-
-#ifndef ____x_ABI_CWindows_CFoundation_CIAsyncOperation_FWD_DEFINED__
-#define ____x_ABI_CWindows_CFoundation_CIAsyncOperation_FWD_DEFINED__
-typedef interface __x_ABI_CWindows_CFoundation_CIAsyncOperation __x_ABI_CWindows_CFoundation_CIAsyncOperation;
-#ifdef __cplusplus
-#define __x_ABI_CWindows_CFoundation_CIAsyncOperation ABI::Windows::Foundation::IAsyncOperation
-namespace ABI {
-    namespace Windows {
-        namespace Foundation {
-            interface IAsyncOperation;
-        }
-    }
-}
-#endif /* __cplusplus */
-#endif
-
-#ifndef ____x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_FWD_DEFINED__
-#define ____x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_FWD_DEFINED__
-typedef interface __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler;
-#ifdef __cplusplus
-#define __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler ABI::Windows::Foundation::AsyncActionCompletedHandler
-namespace ABI {
-    namespace Windows {
-        namespace Foundation {
-            interface AsyncActionCompletedHandler;
-        }
-    }
-}
-#endif /* __cplusplus */
-#endif
-
-#ifndef ____x_ABI_CWindows_CFoundation_CTypedEventHandler_FWD_DEFINED__
-#define ____x_ABI_CWindows_CFoundation_CTypedEventHandler_FWD_DEFINED__
-typedef interface __x_ABI_CWindows_CFoundation_CTypedEventHandler __x_ABI_CWindows_CFoundation_CTypedEventHandler;
-#ifdef __cplusplus
-#define __x_ABI_CWindows_CFoundation_CTypedEventHandler ABI::Windows::Foundation::TypedEventHandler
-namespace ABI {
-    namespace Windows {
-        namespace Foundation {
-            interface TypedEventHandler;
-        }
-    }
-}
-#endif /* __cplusplus */
-#endif
-
+#if WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION >= 0x10000
 #ifdef __cplusplus
 } /* extern "C" */
 namespace ABI {
     namespace Windows {
         namespace Foundation {
-            struct DateTime;
+            enum PropertyType {
+                PropertyType_Empty = 0,
+                PropertyType_UInt8 = 1,
+                PropertyType_Int16 = 2,
+                PropertyType_UInt16 = 3,
+                PropertyType_Int32 = 4,
+                PropertyType_UInt32 = 5,
+                PropertyType_Int64 = 6,
+                PropertyType_UInt64 = 7,
+                PropertyType_Single = 8,
+                PropertyType_Double = 9,
+                PropertyType_Char16 = 10,
+                PropertyType_Boolean = 11,
+                PropertyType_String = 12,
+                PropertyType_Inspectable = 13,
+                PropertyType_DateTime = 14,
+                PropertyType_TimeSpan = 15,
+                PropertyType_Guid = 16,
+                PropertyType_Point = 17,
+                PropertyType_Size = 18,
+                PropertyType_Rect = 19,
+                PropertyType_OtherType = 20,
+                PropertyType_UInt8Array = 1025,
+                PropertyType_Int16Array = 1026,
+                PropertyType_UInt16Array = 1027,
+                PropertyType_Int32Array = 1028,
+                PropertyType_UInt32Array = 1029,
+                PropertyType_Int64Array = 1030,
+                PropertyType_UInt64Array = 1031,
+                PropertyType_SingleArray = 1032,
+                PropertyType_DoubleArray = 1033,
+                PropertyType_Char16Array = 1034,
+                PropertyType_BooleanArray = 1035,
+                PropertyType_StringArray = 1036,
+                PropertyType_InspectableArray = 1037,
+                PropertyType_DateTimeArray = 1038,
+                PropertyType_TimeSpanArray = 1039,
+                PropertyType_GuidArray = 1040,
+                PropertyType_PointArray = 1041,
+                PropertyType_SizeArray = 1042,
+                PropertyType_RectArray = 1043,
+                PropertyType_OtherTypeArray = 1044
+            };
         }
     }
 }
 extern "C" {
 #else
-struct __x_ABI_CWindows_CFoundation_CDateTime;
+enum __x_ABI_CWindows_CFoundation_CPropertyType {
+    PropertyType_Empty = 0,
+    PropertyType_UInt8 = 1,
+    PropertyType_Int16 = 2,
+    PropertyType_UInt16 = 3,
+    PropertyType_Int32 = 4,
+    PropertyType_UInt32 = 5,
+    PropertyType_Int64 = 6,
+    PropertyType_UInt64 = 7,
+    PropertyType_Single = 8,
+    PropertyType_Double = 9,
+    PropertyType_Char16 = 10,
+    PropertyType_Boolean = 11,
+    PropertyType_String = 12,
+    PropertyType_Inspectable = 13,
+    PropertyType_DateTime = 14,
+    PropertyType_TimeSpan = 15,
+    PropertyType_Guid = 16,
+    PropertyType_Point = 17,
+    PropertyType_Size = 18,
+    PropertyType_Rect = 19,
+    PropertyType_OtherType = 20,
+    PropertyType_UInt8Array = 1025,
+    PropertyType_Int16Array = 1026,
+    PropertyType_UInt16Array = 1027,
+    PropertyType_Int32Array = 1028,
+    PropertyType_UInt32Array = 1029,
+    PropertyType_Int64Array = 1030,
+    PropertyType_UInt64Array = 1031,
+    PropertyType_SingleArray = 1032,
+    PropertyType_DoubleArray = 1033,
+    PropertyType_Char16Array = 1034,
+    PropertyType_BooleanArray = 1035,
+    PropertyType_StringArray = 1036,
+    PropertyType_InspectableArray = 1037,
+    PropertyType_DateTimeArray = 1038,
+    PropertyType_TimeSpanArray = 1039,
+    PropertyType_GuidArray = 1040,
+    PropertyType_PointArray = 1041,
+    PropertyType_SizeArray = 1042,
+    PropertyType_RectArray = 1043,
+    PropertyType_OtherTypeArray = 1044
+};
+#ifdef WIDL_using_Windows_Foundation
+#define PropertyType __x_ABI_CWindows_CFoundation_CPropertyType
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif /* WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION >= 0x10000
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            struct Point {
+                FLOAT X;
+                FLOAT Y;
+            };
+        }
+    }
+}
+extern "C" {
+#else
+struct __x_ABI_CWindows_CFoundation_CPoint {
+    FLOAT X;
+    FLOAT Y;
+};
+#ifdef WIDL_using_Windows_Foundation
+#define Point __x_ABI_CWindows_CFoundation_CPoint
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif /* WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION >= 0x10000
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            struct Size {
+                FLOAT Width;
+                FLOAT Height;
+            };
+        }
+    }
+}
+extern "C" {
+#else
+struct __x_ABI_CWindows_CFoundation_CSize {
+    FLOAT Width;
+    FLOAT Height;
+};
+#ifdef WIDL_using_Windows_Foundation
+#define Size __x_ABI_CWindows_CFoundation_CSize
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif /* WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION >= 0x10000
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            struct Rect {
+                FLOAT X;
+                FLOAT Y;
+                FLOAT Width;
+                FLOAT Height;
+            };
+        }
+    }
+}
+extern "C" {
+#else
+struct __x_ABI_CWindows_CFoundation_CRect {
+    FLOAT X;
+    FLOAT Y;
+    FLOAT Width;
+    FLOAT Height;
+};
+#ifdef WIDL_using_Windows_Foundation
+#define Rect __x_ABI_CWindows_CFoundation_CRect
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif /* WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION >= 0x10000
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            struct DateTime {
+                INT64 UniversalTime;
+            };
+        }
+    }
+}
+extern "C" {
+#else
+struct __x_ABI_CWindows_CFoundation_CDateTime {
+    INT64 UniversalTime;
+};
 #ifdef WIDL_using_Windows_Foundation
 #define DateTime __x_ABI_CWindows_CFoundation_CDateTime
 #endif /* WIDL_using_Windows_Foundation */
 #endif
 
+#endif /* WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION >= 0x10000
 #ifdef __cplusplus
 } /* extern "C" */
 namespace ABI {
     namespace Windows {
         namespace Foundation {
-            struct EventRegistrationToken;
+            struct TimeSpan {
+                INT64 Duration;
+            };
         }
     }
 }
 extern "C" {
 #else
-struct __x_ABI_CWindows_CFoundation_CEventRegistrationToken;
+struct __x_ABI_CWindows_CFoundation_CTimeSpan {
+    INT64 Duration;
+};
 #ifdef WIDL_using_Windows_Foundation
-#define EventRegistrationToken __x_ABI_CWindows_CFoundation_CEventRegistrationToken
+#define TimeSpan __x_ABI_CWindows_CFoundation_CTimeSpan
 #endif /* WIDL_using_Windows_Foundation */
 #endif
 
-#ifndef ____x_ABI_CWindows_CFoundation_CCollections_CIPropertySet_FWD_DEFINED__
-#define ____x_ABI_CWindows_CFoundation_CCollections_CIPropertySet_FWD_DEFINED__
-typedef interface __x_ABI_CWindows_CFoundation_CCollections_CIPropertySet __x_ABI_CWindows_CFoundation_CCollections_CIPropertySet;
-#ifdef __cplusplus
-#define __x_ABI_CWindows_CFoundation_CCollections_CIPropertySet ABI::Windows::Foundation::Collections::IPropertySet
+#endif /* WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION >= 0x10000 */
+/*****************************************************************************
+ * IStringable interface
+ */
+#if WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CFoundation_CIStringable_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CFoundation_CIStringable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CFoundation_CIStringable, 0x96369f54, 0x8eb6, 0x48f0, 0xab,0xce, 0xc1,0xb2,0x11,0xe6,0x27,0xc3);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
 namespace ABI {
     namespace Windows {
         namespace Foundation {
-            namespace Collections {
-                interface IPropertySet;
-            }
+            MIDL_INTERFACE("96369f54-8eb6-48f0-abce-c1b211e627c3")
+            IStringable : public IInspectable
+            {
+                virtual HRESULT STDMETHODCALLTYPE ToString(
+                    HSTRING *value) = 0;
+
+            };
         }
     }
 }
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CFoundation_CIStringable, 0x96369f54, 0x8eb6, 0x48f0, 0xab,0xce, 0xc1,0xb2,0x11,0xe6,0x27,0xc3)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CFoundation_CIStringableVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CFoundation_CIStringable *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CFoundation_CIStringable *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CFoundation_CIStringable *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CFoundation_CIStringable *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CFoundation_CIStringable *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CFoundation_CIStringable *This,
+        TrustLevel *trustLevel);
+
+    /*** IStringable methods ***/
+    HRESULT (STDMETHODCALLTYPE *ToString)(
+        __x_ABI_CWindows_CFoundation_CIStringable *This,
+        HSTRING *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CFoundation_CIStringableVtbl;
+
+interface __x_ABI_CWindows_CFoundation_CIStringable {
+    CONST_VTBL __x_ABI_CWindows_CFoundation_CIStringableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CFoundation_CIStringable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CFoundation_CIStringable_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CFoundation_CIStringable_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CFoundation_CIStringable_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CFoundation_CIStringable_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CFoundation_CIStringable_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IStringable methods ***/
+#define __x_ABI_CWindows_CFoundation_CIStringable_ToString(This,value) (This)->lpVtbl->ToString(This,value)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIStringable_QueryInterface(__x_ABI_CWindows_CFoundation_CIStringable* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG __x_ABI_CWindows_CFoundation_CIStringable_AddRef(__x_ABI_CWindows_CFoundation_CIStringable* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG __x_ABI_CWindows_CFoundation_CIStringable_Release(__x_ABI_CWindows_CFoundation_CIStringable* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIStringable_GetIids(__x_ABI_CWindows_CFoundation_CIStringable* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIStringable_GetRuntimeClassName(__x_ABI_CWindows_CFoundation_CIStringable* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIStringable_GetTrustLevel(__x_ABI_CWindows_CFoundation_CIStringable* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IStringable methods ***/
+static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIStringable_ToString(__x_ABI_CWindows_CFoundation_CIStringable* This,HSTRING *value) {
+    return This->lpVtbl->ToString(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IStringable IID___x_ABI_CWindows_CFoundation_CIStringable
+#define IStringableVtbl __x_ABI_CWindows_CFoundation_CIStringableVtbl
+#define IStringable __x_ABI_CWindows_CFoundation_CIStringable
+#define IStringable_QueryInterface __x_ABI_CWindows_CFoundation_CIStringable_QueryInterface
+#define IStringable_AddRef __x_ABI_CWindows_CFoundation_CIStringable_AddRef
+#define IStringable_Release __x_ABI_CWindows_CFoundation_CIStringable_Release
+#define IStringable_GetIids __x_ABI_CWindows_CFoundation_CIStringable_GetIids
+#define IStringable_GetRuntimeClassName __x_ABI_CWindows_CFoundation_CIStringable_GetRuntimeClassName
+#define IStringable_GetTrustLevel __x_ABI_CWindows_CFoundation_CIStringable_GetTrustLevel
+#define IStringable_ToString __x_ABI_CWindows_CFoundation_CIStringable_ToString
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CFoundation_CIStringable_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_FOUNDATIONCONTRACT_VERSION >= 0x10000 */
+
+#ifndef ____FIAsyncOperation_1_boolean_FWD_DEFINED__
+#define ____FIAsyncOperation_1_boolean_FWD_DEFINED__
+typedef interface __FIAsyncOperation_1_boolean __FIAsyncOperation_1_boolean;
+#ifdef __cplusplus
+#define __FIAsyncOperation_1_boolean ABI::Windows::Foundation::IAsyncOperation<boolean >
 #endif /* __cplusplus */
 #endif
 
 /*****************************************************************************
- * IAsyncInfo interface
+ * IAsyncOperationCompletedHandler<boolean > interface
  */
-#ifndef ____x_ABI_CWindows_CFoundation_CIAsyncInfo_INTERFACE_DEFINED__
-#define ____x_ABI_CWindows_CFoundation_CIAsyncInfo_INTERFACE_DEFINED__
+#ifndef ____FIAsyncOperationCompletedHandler_1_boolean_INTERFACE_DEFINED__
+#define ____FIAsyncOperationCompletedHandler_1_boolean_INTERFACE_DEFINED__
 
-DEFINE_GUID(IID___x_ABI_CWindows_CFoundation_CIAsyncInfo, 0x00000036, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+DEFINE_GUID(IID___FIAsyncOperationCompletedHandler_1_boolean, 0xc1d3d1a2, 0xae17, 0x5a5f, 0xb5,0xa2, 0xbd,0xcc,0x88,0x44,0x88,0x9a);
 #if defined(__cplusplus) && !defined(CINTERFACE)
 } /* extern "C" */
 namespace ABI {
     namespace Windows {
         namespace Foundation {
-            MIDL_INTERFACE("00000036-0000-0000-c000-000000000046")
-            IAsyncInfo : public IInspectable
+            template<>
+            MIDL_INTERFACE("c1d3d1a2-ae17-5a5f-b5a2-bdcc8844889a")
+            IAsyncOperationCompletedHandler<boolean > : IAsyncOperationCompletedHandler_impl<boolean >
             {
-                virtual HRESULT STDMETHODCALLTYPE get_Id(
-                    unsigned int *id) = 0;
-
-                virtual HRESULT STDMETHODCALLTYPE get_Status(
-                    enum AsyncStatus *status) = 0;
-
-                virtual HRESULT STDMETHODCALLTYPE get_ErrorCode(
-                    HRESULT *errorCode) = 0;
-
-                virtual HRESULT STDMETHODCALLTYPE Cancel(
-                    ) = 0;
-
-                virtual HRESULT STDMETHODCALLTYPE Close(
-                    ) = 0;
-
             };
         }
     }
 }
 extern "C" {
 #ifdef __CRT_UUID_DECL
-__CRT_UUID_DECL(__x_ABI_CWindows_CFoundation_CIAsyncInfo, 0x00000036, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46)
+__CRT_UUID_DECL(__FIAsyncOperationCompletedHandler_1_boolean, 0xc1d3d1a2, 0xae17, 0x5a5f, 0xb5,0xa2, 0xbd,0xcc,0x88,0x44,0x88,0x9a)
 #endif
 #else
-typedef struct __x_ABI_CWindows_CFoundation_CIAsyncInfoVtbl {
+typedef struct __FIAsyncOperationCompletedHandler_1_booleanVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        __x_ABI_CWindows_CFoundation_CIAsyncInfo *This,
+        __FIAsyncOperationCompletedHandler_1_boolean *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        __x_ABI_CWindows_CFoundation_CIAsyncInfo *This);
+        __FIAsyncOperationCompletedHandler_1_boolean *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        __x_ABI_CWindows_CFoundation_CIAsyncInfo *This);
+        __FIAsyncOperationCompletedHandler_1_boolean *This);
 
-    /*** IInspectable methods ***/
-    HRESULT (STDMETHODCALLTYPE *GetIids)(
-        __x_ABI_CWindows_CFoundation_CIAsyncInfo *This,
-        ULONG *iidCount,
-        IID **iids);
-
-    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
-        __x_ABI_CWindows_CFoundation_CIAsyncInfo *This,
-        HSTRING *className);
-
-    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
-        __x_ABI_CWindows_CFoundation_CIAsyncInfo *This,
-        TrustLevel *trustLevel);
-
-    /*** IAsyncInfo methods ***/
-    HRESULT (STDMETHODCALLTYPE *get_Id)(
-        __x_ABI_CWindows_CFoundation_CIAsyncInfo *This,
-        unsigned int *id);
-
-    HRESULT (STDMETHODCALLTYPE *get_Status)(
-        __x_ABI_CWindows_CFoundation_CIAsyncInfo *This,
-        enum __x_ABI_CWindows_CFoundation_CAsyncStatus *status);
-
-    HRESULT (STDMETHODCALLTYPE *get_ErrorCode)(
-        __x_ABI_CWindows_CFoundation_CIAsyncInfo *This,
-        HRESULT *errorCode);
-
-    HRESULT (STDMETHODCALLTYPE *Cancel)(
-        __x_ABI_CWindows_CFoundation_CIAsyncInfo *This);
-
-    HRESULT (STDMETHODCALLTYPE *Close)(
-        __x_ABI_CWindows_CFoundation_CIAsyncInfo *This);
+    /*** IAsyncOperationCompletedHandler<boolean > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FIAsyncOperationCompletedHandler_1_boolean *This,
+        __FIAsyncOperation_1_boolean *info,
+        AsyncStatus status);
 
     END_INTERFACE
-} __x_ABI_CWindows_CFoundation_CIAsyncInfoVtbl;
+} __FIAsyncOperationCompletedHandler_1_booleanVtbl;
 
-interface __x_ABI_CWindows_CFoundation_CIAsyncInfo {
-    CONST_VTBL __x_ABI_CWindows_CFoundation_CIAsyncInfoVtbl* lpVtbl;
+interface __FIAsyncOperationCompletedHandler_1_boolean {
+    CONST_VTBL __FIAsyncOperationCompletedHandler_1_booleanVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
 #ifndef WIDL_C_INLINE_WRAPPERS
 /*** IUnknown methods ***/
-#define __x_ABI_CWindows_CFoundation_CIAsyncInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define __x_ABI_CWindows_CFoundation_CIAsyncInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define __x_ABI_CWindows_CFoundation_CIAsyncInfo_Release(This) (This)->lpVtbl->Release(This)
-/*** IInspectable methods ***/
-#define __x_ABI_CWindows_CFoundation_CIAsyncInfo_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
-#define __x_ABI_CWindows_CFoundation_CIAsyncInfo_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
-#define __x_ABI_CWindows_CFoundation_CIAsyncInfo_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
-/*** IAsyncInfo methods ***/
-#define __x_ABI_CWindows_CFoundation_CIAsyncInfo_get_Id(This,id) (This)->lpVtbl->get_Id(This,id)
-#define __x_ABI_CWindows_CFoundation_CIAsyncInfo_get_Status(This,status) (This)->lpVtbl->get_Status(This,status)
-#define __x_ABI_CWindows_CFoundation_CIAsyncInfo_get_ErrorCode(This,errorCode) (This)->lpVtbl->get_ErrorCode(This,errorCode)
-#define __x_ABI_CWindows_CFoundation_CIAsyncInfo_Cancel(This) (This)->lpVtbl->Cancel(This)
-#define __x_ABI_CWindows_CFoundation_CIAsyncInfo_Close(This) (This)->lpVtbl->Close(This)
+#define __FIAsyncOperationCompletedHandler_1_boolean_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIAsyncOperationCompletedHandler_1_boolean_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIAsyncOperationCompletedHandler_1_boolean_Release(This) (This)->lpVtbl->Release(This)
+/*** IAsyncOperationCompletedHandler<boolean > methods ***/
+#define __FIAsyncOperationCompletedHandler_1_boolean_Invoke(This,info,status) (This)->lpVtbl->Invoke(This,info,status)
 #else
 /*** IUnknown methods ***/
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncInfo_QueryInterface(__x_ABI_CWindows_CFoundation_CIAsyncInfo* This,REFIID riid,void **ppvObject) {
+static FORCEINLINE HRESULT __FIAsyncOperationCompletedHandler_1_boolean_QueryInterface(__FIAsyncOperationCompletedHandler_1_boolean* This,REFIID riid,void **ppvObject) {
     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
 }
-static FORCEINLINE ULONG __x_ABI_CWindows_CFoundation_CIAsyncInfo_AddRef(__x_ABI_CWindows_CFoundation_CIAsyncInfo* This) {
+static FORCEINLINE ULONG __FIAsyncOperationCompletedHandler_1_boolean_AddRef(__FIAsyncOperationCompletedHandler_1_boolean* This) {
     return This->lpVtbl->AddRef(This);
 }
-static FORCEINLINE ULONG __x_ABI_CWindows_CFoundation_CIAsyncInfo_Release(__x_ABI_CWindows_CFoundation_CIAsyncInfo* This) {
+static FORCEINLINE ULONG __FIAsyncOperationCompletedHandler_1_boolean_Release(__FIAsyncOperationCompletedHandler_1_boolean* This) {
     return This->lpVtbl->Release(This);
 }
-/*** IInspectable methods ***/
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncInfo_GetIids(__x_ABI_CWindows_CFoundation_CIAsyncInfo* This,ULONG *iidCount,IID **iids) {
-    return This->lpVtbl->GetIids(This,iidCount,iids);
-}
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncInfo_GetRuntimeClassName(__x_ABI_CWindows_CFoundation_CIAsyncInfo* This,HSTRING *className) {
-    return This->lpVtbl->GetRuntimeClassName(This,className);
-}
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncInfo_GetTrustLevel(__x_ABI_CWindows_CFoundation_CIAsyncInfo* This,TrustLevel *trustLevel) {
-    return This->lpVtbl->GetTrustLevel(This,trustLevel);
-}
-/*** IAsyncInfo methods ***/
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncInfo_get_Id(__x_ABI_CWindows_CFoundation_CIAsyncInfo* This,unsigned int *id) {
-    return This->lpVtbl->get_Id(This,id);
-}
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncInfo_get_Status(__x_ABI_CWindows_CFoundation_CIAsyncInfo* This,enum __x_ABI_CWindows_CFoundation_CAsyncStatus *status) {
-    return This->lpVtbl->get_Status(This,status);
-}
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncInfo_get_ErrorCode(__x_ABI_CWindows_CFoundation_CIAsyncInfo* This,HRESULT *errorCode) {
-    return This->lpVtbl->get_ErrorCode(This,errorCode);
-}
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncInfo_Cancel(__x_ABI_CWindows_CFoundation_CIAsyncInfo* This) {
-    return This->lpVtbl->Cancel(This);
-}
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncInfo_Close(__x_ABI_CWindows_CFoundation_CIAsyncInfo* This) {
-    return This->lpVtbl->Close(This);
+/*** IAsyncOperationCompletedHandler<boolean > methods ***/
+static FORCEINLINE HRESULT __FIAsyncOperationCompletedHandler_1_boolean_Invoke(__FIAsyncOperationCompletedHandler_1_boolean* This,__FIAsyncOperation_1_boolean *info,AsyncStatus status) {
+    return This->lpVtbl->Invoke(This,info,status);
 }
 #endif
 #ifdef WIDL_using_Windows_Foundation
-#define IID_IAsyncInfo IID___x_ABI_CWindows_CFoundation_CIAsyncInfo
-#define IAsyncInfoVtbl __x_ABI_CWindows_CFoundation_CIAsyncInfoVtbl
-#define IAsyncInfo __x_ABI_CWindows_CFoundation_CIAsyncInfo
-#define IAsyncInfo_QueryInterface __x_ABI_CWindows_CFoundation_CIAsyncInfo_QueryInterface
-#define IAsyncInfo_AddRef __x_ABI_CWindows_CFoundation_CIAsyncInfo_AddRef
-#define IAsyncInfo_Release __x_ABI_CWindows_CFoundation_CIAsyncInfo_Release
-#define IAsyncInfo_GetIids __x_ABI_CWindows_CFoundation_CIAsyncInfo_GetIids
-#define IAsyncInfo_GetRuntimeClassName __x_ABI_CWindows_CFoundation_CIAsyncInfo_GetRuntimeClassName
-#define IAsyncInfo_GetTrustLevel __x_ABI_CWindows_CFoundation_CIAsyncInfo_GetTrustLevel
-#define IAsyncInfo_get_Id __x_ABI_CWindows_CFoundation_CIAsyncInfo_get_Id
-#define IAsyncInfo_get_Status __x_ABI_CWindows_CFoundation_CIAsyncInfo_get_Status
-#define IAsyncInfo_get_ErrorCode __x_ABI_CWindows_CFoundation_CIAsyncInfo_get_ErrorCode
-#define IAsyncInfo_Cancel __x_ABI_CWindows_CFoundation_CIAsyncInfo_Cancel
-#define IAsyncInfo_Close __x_ABI_CWindows_CFoundation_CIAsyncInfo_Close
+#define IID_IAsyncOperationCompletedHandler_boolean IID___FIAsyncOperationCompletedHandler_1_boolean
+#define IAsyncOperationCompletedHandler_booleanVtbl __FIAsyncOperationCompletedHandler_1_booleanVtbl
+#define IAsyncOperationCompletedHandler_boolean __FIAsyncOperationCompletedHandler_1_boolean
+#define IAsyncOperationCompletedHandler_boolean_QueryInterface __FIAsyncOperationCompletedHandler_1_boolean_QueryInterface
+#define IAsyncOperationCompletedHandler_boolean_AddRef __FIAsyncOperationCompletedHandler_1_boolean_AddRef
+#define IAsyncOperationCompletedHandler_boolean_Release __FIAsyncOperationCompletedHandler_1_boolean_Release
+#define IAsyncOperationCompletedHandler_boolean_Invoke __FIAsyncOperationCompletedHandler_1_boolean_Invoke
 #endif /* WIDL_using_Windows_Foundation */
 #endif
 
 #endif
 
-#endif  /* ____x_ABI_CWindows_CFoundation_CIAsyncInfo_INTERFACE_DEFINED__ */
+#endif  /* ____FIAsyncOperationCompletedHandler_1_boolean_INTERFACE_DEFINED__ */
 
 /*****************************************************************************
- * IASyncAction interface
+ * IAsyncOperation<boolean > interface
  */
-#ifndef ____x_ABI_CWindows_CFoundation_CIASyncAction_INTERFACE_DEFINED__
-#define ____x_ABI_CWindows_CFoundation_CIASyncAction_INTERFACE_DEFINED__
+#ifndef ____FIAsyncOperation_1_boolean_INTERFACE_DEFINED__
+#define ____FIAsyncOperation_1_boolean_INTERFACE_DEFINED__
 
-DEFINE_GUID(IID___x_ABI_CWindows_CFoundation_CIASyncAction, 0x5a648006, 0x843a, 0x4da9, 0x86,0x5b, 0x9d,0x26,0xe5,0xdf,0xad,0x7b);
+DEFINE_GUID(IID___FIAsyncOperation_1_boolean, 0xcdb5efb3, 0x5788, 0x509d, 0x9b,0xe1, 0x71,0xcc,0xb8,0xa3,0x36,0x2a);
 #if defined(__cplusplus) && !defined(CINTERFACE)
 } /* extern "C" */
 namespace ABI {
     namespace Windows {
         namespace Foundation {
-            MIDL_INTERFACE("5a648006-843a-4da9-865b-9d26e5dfad7b")
-            IASyncAction : public IAsyncInfo
+            template<>
+            MIDL_INTERFACE("cdb5efb3-5788-509d-9be1-71ccb8a3362a")
+            IAsyncOperation<boolean > : IAsyncOperation_impl<boolean >
             {
-                virtual HRESULT STDMETHODCALLTYPE put_Completed(
-                    ABI::Windows::Foundation::AsyncActionCompletedHandler *handler) = 0;
-
-                virtual HRESULT STDMETHODCALLTYPE get_Completed(
-                    ABI::Windows::Foundation::AsyncActionCompletedHandler **handler) = 0;
-
-                virtual HRESULT STDMETHODCALLTYPE GetResults(
-                    ) = 0;
-
             };
         }
     }
 }
 extern "C" {
 #ifdef __CRT_UUID_DECL
-__CRT_UUID_DECL(__x_ABI_CWindows_CFoundation_CIASyncAction, 0x5a648006, 0x843a, 0x4da9, 0x86,0x5b, 0x9d,0x26,0xe5,0xdf,0xad,0x7b)
+__CRT_UUID_DECL(__FIAsyncOperation_1_boolean, 0xcdb5efb3, 0x5788, 0x509d, 0x9b,0xe1, 0x71,0xcc,0xb8,0xa3,0x36,0x2a)
 #endif
 #else
-typedef struct __x_ABI_CWindows_CFoundation_CIASyncActionVtbl {
+typedef struct __FIAsyncOperation_1_booleanVtbl {
     BEGIN_INTERFACE
 
     /*** IUnknown methods ***/
     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        __x_ABI_CWindows_CFoundation_CIASyncAction *This,
+        __FIAsyncOperation_1_boolean *This,
         REFIID riid,
         void **ppvObject);
 
     ULONG (STDMETHODCALLTYPE *AddRef)(
-        __x_ABI_CWindows_CFoundation_CIASyncAction *This);
+        __FIAsyncOperation_1_boolean *This);
 
     ULONG (STDMETHODCALLTYPE *Release)(
-        __x_ABI_CWindows_CFoundation_CIASyncAction *This);
+        __FIAsyncOperation_1_boolean *This);
 
     /*** IInspectable methods ***/
     HRESULT (STDMETHODCALLTYPE *GetIids)(
-        __x_ABI_CWindows_CFoundation_CIASyncAction *This,
+        __FIAsyncOperation_1_boolean *This,
         ULONG *iidCount,
         IID **iids);
 
     HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
-        __x_ABI_CWindows_CFoundation_CIASyncAction *This,
+        __FIAsyncOperation_1_boolean *This,
         HSTRING *className);
 
     HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
-        __x_ABI_CWindows_CFoundation_CIASyncAction *This,
+        __FIAsyncOperation_1_boolean *This,
         TrustLevel *trustLevel);
 
-    /*** IAsyncInfo methods ***/
-    HRESULT (STDMETHODCALLTYPE *get_Id)(
-        __x_ABI_CWindows_CFoundation_CIASyncAction *This,
-        unsigned int *id);
-
-    HRESULT (STDMETHODCALLTYPE *get_Status)(
-        __x_ABI_CWindows_CFoundation_CIASyncAction *This,
-        enum __x_ABI_CWindows_CFoundation_CAsyncStatus *status);
-
-    HRESULT (STDMETHODCALLTYPE *get_ErrorCode)(
-        __x_ABI_CWindows_CFoundation_CIASyncAction *This,
-        HRESULT *errorCode);
-
-    HRESULT (STDMETHODCALLTYPE *Cancel)(
-        __x_ABI_CWindows_CFoundation_CIASyncAction *This);
-
-    HRESULT (STDMETHODCALLTYPE *Close)(
-        __x_ABI_CWindows_CFoundation_CIASyncAction *This);
-
-    /*** IASyncAction methods ***/
+    /*** IAsyncOperation<boolean > methods ***/
     HRESULT (STDMETHODCALLTYPE *put_Completed)(
-        __x_ABI_CWindows_CFoundation_CIASyncAction *This,
-        __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler *handler);
+        __FIAsyncOperation_1_boolean *This,
+        __FIAsyncOperationCompletedHandler_1_boolean *handler);
 
     HRESULT (STDMETHODCALLTYPE *get_Completed)(
-        __x_ABI_CWindows_CFoundation_CIASyncAction *This,
-        __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler **handler);
+        __FIAsyncOperation_1_boolean *This,
+        __FIAsyncOperationCompletedHandler_1_boolean **handler);
 
     HRESULT (STDMETHODCALLTYPE *GetResults)(
-        __x_ABI_CWindows_CFoundation_CIASyncAction *This);
+        __FIAsyncOperation_1_boolean *This,
+        boolean **results);
 
     END_INTERFACE
-} __x_ABI_CWindows_CFoundation_CIASyncActionVtbl;
+} __FIAsyncOperation_1_booleanVtbl;
 
-interface __x_ABI_CWindows_CFoundation_CIASyncAction {
-    CONST_VTBL __x_ABI_CWindows_CFoundation_CIASyncActionVtbl* lpVtbl;
+interface __FIAsyncOperation_1_boolean {
+    CONST_VTBL __FIAsyncOperation_1_booleanVtbl* lpVtbl;
 };
 
 #ifdef COBJMACROS
 #ifndef WIDL_C_INLINE_WRAPPERS
 /*** IUnknown methods ***/
-#define __x_ABI_CWindows_CFoundation_CIASyncAction_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define __x_ABI_CWindows_CFoundation_CIASyncAction_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define __x_ABI_CWindows_CFoundation_CIASyncAction_Release(This) (This)->lpVtbl->Release(This)
+#define __FIAsyncOperation_1_boolean_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIAsyncOperation_1_boolean_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIAsyncOperation_1_boolean_Release(This) (This)->lpVtbl->Release(This)
 /*** IInspectable methods ***/
-#define __x_ABI_CWindows_CFoundation_CIASyncAction_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
-#define __x_ABI_CWindows_CFoundation_CIASyncAction_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
-#define __x_ABI_CWindows_CFoundation_CIASyncAction_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
-/*** IAsyncInfo methods ***/
-#define __x_ABI_CWindows_CFoundation_CIASyncAction_get_Id(This,id) (This)->lpVtbl->get_Id(This,id)
-#define __x_ABI_CWindows_CFoundation_CIASyncAction_get_Status(This,status) (This)->lpVtbl->get_Status(This,status)
-#define __x_ABI_CWindows_CFoundation_CIASyncAction_get_ErrorCode(This,errorCode) (This)->lpVtbl->get_ErrorCode(This,errorCode)
-#define __x_ABI_CWindows_CFoundation_CIASyncAction_Cancel(This) (This)->lpVtbl->Cancel(This)
-#define __x_ABI_CWindows_CFoundation_CIASyncAction_Close(This) (This)->lpVtbl->Close(This)
-/*** IASyncAction methods ***/
-#define __x_ABI_CWindows_CFoundation_CIASyncAction_put_Completed(This,handler) (This)->lpVtbl->put_Completed(This,handler)
-#define __x_ABI_CWindows_CFoundation_CIASyncAction_get_Completed(This,handler) (This)->lpVtbl->get_Completed(This,handler)
-#define __x_ABI_CWindows_CFoundation_CIASyncAction_GetResults(This) (This)->lpVtbl->GetResults(This)
+#define __FIAsyncOperation_1_boolean_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIAsyncOperation_1_boolean_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIAsyncOperation_1_boolean_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IAsyncOperation<boolean > methods ***/
+#define __FIAsyncOperation_1_boolean_put_Completed(This,handler) (This)->lpVtbl->put_Completed(This,handler)
+#define __FIAsyncOperation_1_boolean_get_Completed(This,handler) (This)->lpVtbl->get_Completed(This,handler)
+#define __FIAsyncOperation_1_boolean_GetResults(This,results) (This)->lpVtbl->GetResults(This,results)
 #else
 /*** IUnknown methods ***/
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIASyncAction_QueryInterface(__x_ABI_CWindows_CFoundation_CIASyncAction* This,REFIID riid,void **ppvObject) {
+static FORCEINLINE HRESULT __FIAsyncOperation_1_boolean_QueryInterface(__FIAsyncOperation_1_boolean* This,REFIID riid,void **ppvObject) {
     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
 }
-static FORCEINLINE ULONG __x_ABI_CWindows_CFoundation_CIASyncAction_AddRef(__x_ABI_CWindows_CFoundation_CIASyncAction* This) {
+static FORCEINLINE ULONG __FIAsyncOperation_1_boolean_AddRef(__FIAsyncOperation_1_boolean* This) {
     return This->lpVtbl->AddRef(This);
 }
-static FORCEINLINE ULONG __x_ABI_CWindows_CFoundation_CIASyncAction_Release(__x_ABI_CWindows_CFoundation_CIASyncAction* This) {
+static FORCEINLINE ULONG __FIAsyncOperation_1_boolean_Release(__FIAsyncOperation_1_boolean* This) {
     return This->lpVtbl->Release(This);
 }
 /*** IInspectable methods ***/
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIASyncAction_GetIids(__x_ABI_CWindows_CFoundation_CIASyncAction* This,ULONG *iidCount,IID **iids) {
+static FORCEINLINE HRESULT __FIAsyncOperation_1_boolean_GetIids(__FIAsyncOperation_1_boolean* This,ULONG *iidCount,IID **iids) {
     return This->lpVtbl->GetIids(This,iidCount,iids);
 }
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIASyncAction_GetRuntimeClassName(__x_ABI_CWindows_CFoundation_CIASyncAction* This,HSTRING *className) {
+static FORCEINLINE HRESULT __FIAsyncOperation_1_boolean_GetRuntimeClassName(__FIAsyncOperation_1_boolean* This,HSTRING *className) {
     return This->lpVtbl->GetRuntimeClassName(This,className);
 }
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIASyncAction_GetTrustLevel(__x_ABI_CWindows_CFoundation_CIASyncAction* This,TrustLevel *trustLevel) {
+static FORCEINLINE HRESULT __FIAsyncOperation_1_boolean_GetTrustLevel(__FIAsyncOperation_1_boolean* This,TrustLevel *trustLevel) {
     return This->lpVtbl->GetTrustLevel(This,trustLevel);
 }
-/*** IAsyncInfo methods ***/
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIASyncAction_get_Id(__x_ABI_CWindows_CFoundation_CIASyncAction* This,unsigned int *id) {
-    return This->lpVtbl->get_Id(This,id);
-}
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIASyncAction_get_Status(__x_ABI_CWindows_CFoundation_CIASyncAction* This,enum __x_ABI_CWindows_CFoundation_CAsyncStatus *status) {
-    return This->lpVtbl->get_Status(This,status);
-}
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIASyncAction_get_ErrorCode(__x_ABI_CWindows_CFoundation_CIASyncAction* This,HRESULT *errorCode) {
-    return This->lpVtbl->get_ErrorCode(This,errorCode);
-}
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIASyncAction_Cancel(__x_ABI_CWindows_CFoundation_CIASyncAction* This) {
-    return This->lpVtbl->Cancel(This);
-}
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIASyncAction_Close(__x_ABI_CWindows_CFoundation_CIASyncAction* This) {
-    return This->lpVtbl->Close(This);
-}
-/*** IASyncAction methods ***/
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIASyncAction_put_Completed(__x_ABI_CWindows_CFoundation_CIASyncAction* This,__x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler *handler) {
+/*** IAsyncOperation<boolean > methods ***/
+static FORCEINLINE HRESULT __FIAsyncOperation_1_boolean_put_Completed(__FIAsyncOperation_1_boolean* This,__FIAsyncOperationCompletedHandler_1_boolean *handler) {
     return This->lpVtbl->put_Completed(This,handler);
 }
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIASyncAction_get_Completed(__x_ABI_CWindows_CFoundation_CIASyncAction* This,__x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler **handler) {
+static FORCEINLINE HRESULT __FIAsyncOperation_1_boolean_get_Completed(__FIAsyncOperation_1_boolean* This,__FIAsyncOperationCompletedHandler_1_boolean **handler) {
     return This->lpVtbl->get_Completed(This,handler);
 }
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIASyncAction_GetResults(__x_ABI_CWindows_CFoundation_CIASyncAction* This) {
-    return This->lpVtbl->GetResults(This);
+static FORCEINLINE HRESULT __FIAsyncOperation_1_boolean_GetResults(__FIAsyncOperation_1_boolean* This,boolean **results) {
+    return This->lpVtbl->GetResults(This,results);
 }
 #endif
 #ifdef WIDL_using_Windows_Foundation
-#define IID_IASyncAction IID___x_ABI_CWindows_CFoundation_CIASyncAction
-#define IASyncActionVtbl __x_ABI_CWindows_CFoundation_CIASyncActionVtbl
-#define IASyncAction __x_ABI_CWindows_CFoundation_CIASyncAction
-#define IASyncAction_QueryInterface __x_ABI_CWindows_CFoundation_CIASyncAction_QueryInterface
-#define IASyncAction_AddRef __x_ABI_CWindows_CFoundation_CIASyncAction_AddRef
-#define IASyncAction_Release __x_ABI_CWindows_CFoundation_CIASyncAction_Release
-#define IASyncAction_GetIids __x_ABI_CWindows_CFoundation_CIASyncAction_GetIids
-#define IASyncAction_GetRuntimeClassName __x_ABI_CWindows_CFoundation_CIASyncAction_GetRuntimeClassName
-#define IASyncAction_GetTrustLevel __x_ABI_CWindows_CFoundation_CIASyncAction_GetTrustLevel
-#define IASyncAction_get_Id __x_ABI_CWindows_CFoundation_CIASyncAction_get_Id
-#define IASyncAction_get_Status __x_ABI_CWindows_CFoundation_CIASyncAction_get_Status
-#define IASyncAction_get_ErrorCode __x_ABI_CWindows_CFoundation_CIASyncAction_get_ErrorCode
-#define IASyncAction_Cancel __x_ABI_CWindows_CFoundation_CIASyncAction_Cancel
-#define IASyncAction_Close __x_ABI_CWindows_CFoundation_CIASyncAction_Close
-#define IASyncAction_put_Completed __x_ABI_CWindows_CFoundation_CIASyncAction_put_Completed
-#define IASyncAction_get_Completed __x_ABI_CWindows_CFoundation_CIASyncAction_get_Completed
-#define IASyncAction_GetResults __x_ABI_CWindows_CFoundation_CIASyncAction_GetResults
+#define IID_IAsyncOperation_boolean IID___FIAsyncOperation_1_boolean
+#define IAsyncOperation_booleanVtbl __FIAsyncOperation_1_booleanVtbl
+#define IAsyncOperation_boolean __FIAsyncOperation_1_boolean
+#define IAsyncOperation_boolean_QueryInterface __FIAsyncOperation_1_boolean_QueryInterface
+#define IAsyncOperation_boolean_AddRef __FIAsyncOperation_1_boolean_AddRef
+#define IAsyncOperation_boolean_Release __FIAsyncOperation_1_boolean_Release
+#define IAsyncOperation_boolean_GetIids __FIAsyncOperation_1_boolean_GetIids
+#define IAsyncOperation_boolean_GetRuntimeClassName __FIAsyncOperation_1_boolean_GetRuntimeClassName
+#define IAsyncOperation_boolean_GetTrustLevel __FIAsyncOperation_1_boolean_GetTrustLevel
+#define IAsyncOperation_boolean_put_Completed __FIAsyncOperation_1_boolean_put_Completed
+#define IAsyncOperation_boolean_get_Completed __FIAsyncOperation_1_boolean_get_Completed
+#define IAsyncOperation_boolean_GetResults __FIAsyncOperation_1_boolean_GetResults
 #endif /* WIDL_using_Windows_Foundation */
 #endif
 
 #endif
 
-#endif  /* ____x_ABI_CWindows_CFoundation_CIASyncAction_INTERFACE_DEFINED__ */
-
-/*****************************************************************************
- * AsyncActionCompletedHandler interface
- */
-#ifndef ____x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_INTERFACE_DEFINED__
-#define ____x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_INTERFACE_DEFINED__
-
-DEFINE_GUID(IID___x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler, 0xa4ed5c81, 0x76c9, 0x40bd, 0x8b,0xe6, 0xb1,0xd9,0x0f,0xb2,0x0a,0xe7);
-#if defined(__cplusplus) && !defined(CINTERFACE)
-} /* extern "C" */
-namespace ABI {
-    namespace Windows {
-        namespace Foundation {
-            MIDL_INTERFACE("a4ed5c81-76c9-40bd-8be6-b1d90fb20ae7")
-            AsyncActionCompletedHandler : public IUnknown
-            {
-                virtual HRESULT STDMETHODCALLTYPE Invoke(
-                    ABI::Windows::Foundation::IAsyncAction *asyncAction,
-                    enum AsyncStatus status) = 0;
-
-            };
-        }
-    }
-}
-extern "C" {
-#ifdef __CRT_UUID_DECL
-__CRT_UUID_DECL(__x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler, 0xa4ed5c81, 0x76c9, 0x40bd, 0x8b,0xe6, 0xb1,0xd9,0x0f,0xb2,0x0a,0xe7)
-#endif
-#else
-typedef struct __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandlerVtbl {
-    BEGIN_INTERFACE
-
-    /*** IUnknown methods ***/
-    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler *This,
-        REFIID riid,
-        void **ppvObject);
-
-    ULONG (STDMETHODCALLTYPE *AddRef)(
-        __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler *This);
-
-    ULONG (STDMETHODCALLTYPE *Release)(
-        __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler *This);
-
-    /*** AsyncActionCompletedHandler methods ***/
-    HRESULT (STDMETHODCALLTYPE *Invoke)(
-        __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler *This,
-        __x_ABI_CWindows_CFoundation_CIAsyncAction *asyncAction,
-        enum __x_ABI_CWindows_CFoundation_CAsyncStatus status);
-
-    END_INTERFACE
-} __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandlerVtbl;
-
-interface __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler {
-    CONST_VTBL __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandlerVtbl* lpVtbl;
-};
-
-#ifdef COBJMACROS
-#ifndef WIDL_C_INLINE_WRAPPERS
-/*** IUnknown methods ***/
-#define __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_Release(This) (This)->lpVtbl->Release(This)
-/*** AsyncActionCompletedHandler methods ***/
-#define __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_Invoke(This,asyncAction,status) (This)->lpVtbl->Invoke(This,asyncAction,status)
-#else
-/*** IUnknown methods ***/
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_QueryInterface(__x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler* This,REFIID riid,void **ppvObject) {
-    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
-}
-static FORCEINLINE ULONG __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_AddRef(__x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler* This) {
-    return This->lpVtbl->AddRef(This);
-}
-static FORCEINLINE ULONG __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_Release(__x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler* This) {
-    return This->lpVtbl->Release(This);
-}
-/*** AsyncActionCompletedHandler methods ***/
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_Invoke(__x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler* This,__x_ABI_CWindows_CFoundation_CIAsyncAction *asyncAction,enum __x_ABI_CWindows_CFoundation_CAsyncStatus status) {
-    return This->lpVtbl->Invoke(This,asyncAction,status);
-}
-#endif
-#ifdef WIDL_using_Windows_Foundation
-#define IID_AsyncActionCompletedHandler IID___x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler
-#define AsyncActionCompletedHandlerVtbl __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandlerVtbl
-#define AsyncActionCompletedHandler __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler
-#define AsyncActionCompletedHandler_QueryInterface __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_QueryInterface
-#define AsyncActionCompletedHandler_AddRef __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_AddRef
-#define AsyncActionCompletedHandler_Release __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_Release
-#define AsyncActionCompletedHandler_Invoke __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_Invoke
-#endif /* WIDL_using_Windows_Foundation */
-#endif
-
-#endif
-
-#endif  /* ____x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler_INTERFACE_DEFINED__ */
-
-/*****************************************************************************
- * IAsyncOperation interface
- */
-#ifndef ____x_ABI_CWindows_CFoundation_CIAsyncOperation_INTERFACE_DEFINED__
-#define ____x_ABI_CWindows_CFoundation_CIAsyncOperation_INTERFACE_DEFINED__
-
-DEFINE_GUID(IID___x_ABI_CWindows_CFoundation_CIAsyncOperation, 0x9fc2b0bb, 0xe446, 0x44e2, 0xaa,0x61, 0x9c,0xab,0x8f,0x63,0x6a,0xf2);
-#if defined(__cplusplus) && !defined(CINTERFACE)
-} /* extern "C" */
-namespace ABI {
-    namespace Windows {
-        namespace Foundation {
-            MIDL_INTERFACE("9fc2b0bb-e446-44e2-aa61-9cab8f636af2")
-            IAsyncOperation : public IAsyncInfo
-            {
-                virtual HRESULT STDMETHODCALLTYPE put_Completed(
-                    ABI::Windows::Foundation::AsyncActionCompletedHandler *handler) = 0;
-
-                virtual HRESULT STDMETHODCALLTYPE get_Completed(
-                    ABI::Windows::Foundation::AsyncActionCompletedHandler **handler) = 0;
-
-                virtual IInspectable * STDMETHODCALLTYPE GetResults(
-                    ) = 0;
-
-            };
-        }
-    }
-}
-extern "C" {
-#ifdef __CRT_UUID_DECL
-__CRT_UUID_DECL(__x_ABI_CWindows_CFoundation_CIAsyncOperation, 0x9fc2b0bb, 0xe446, 0x44e2, 0xaa,0x61, 0x9c,0xab,0x8f,0x63,0x6a,0xf2)
-#endif
-#else
-typedef struct __x_ABI_CWindows_CFoundation_CIAsyncOperationVtbl {
-    BEGIN_INTERFACE
-
-    /*** IUnknown methods ***/
-    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
-        __x_ABI_CWindows_CFoundation_CIAsyncOperation *This,
-        REFIID riid,
-        void **ppvObject);
-
-    ULONG (STDMETHODCALLTYPE *AddRef)(
-        __x_ABI_CWindows_CFoundation_CIAsyncOperation *This);
-
-    ULONG (STDMETHODCALLTYPE *Release)(
-        __x_ABI_CWindows_CFoundation_CIAsyncOperation *This);
-
-    /*** IInspectable methods ***/
-    HRESULT (STDMETHODCALLTYPE *GetIids)(
-        __x_ABI_CWindows_CFoundation_CIAsyncOperation *This,
-        ULONG *iidCount,
-        IID **iids);
-
-    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
-        __x_ABI_CWindows_CFoundation_CIAsyncOperation *This,
-        HSTRING *className);
-
-    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
-        __x_ABI_CWindows_CFoundation_CIAsyncOperation *This,
-        TrustLevel *trustLevel);
-
-    /*** IAsyncInfo methods ***/
-    HRESULT (STDMETHODCALLTYPE *get_Id)(
-        __x_ABI_CWindows_CFoundation_CIAsyncOperation *This,
-        unsigned int *id);
-
-    HRESULT (STDMETHODCALLTYPE *get_Status)(
-        __x_ABI_CWindows_CFoundation_CIAsyncOperation *This,
-        enum __x_ABI_CWindows_CFoundation_CAsyncStatus *status);
-
-    HRESULT (STDMETHODCALLTYPE *get_ErrorCode)(
-        __x_ABI_CWindows_CFoundation_CIAsyncOperation *This,
-        HRESULT *errorCode);
-
-    HRESULT (STDMETHODCALLTYPE *Cancel)(
-        __x_ABI_CWindows_CFoundation_CIAsyncOperation *This);
-
-    HRESULT (STDMETHODCALLTYPE *Close)(
-        __x_ABI_CWindows_CFoundation_CIAsyncOperation *This);
-
-    /*** IAsyncOperation methods ***/
-    HRESULT (STDMETHODCALLTYPE *put_Completed)(
-        __x_ABI_CWindows_CFoundation_CIAsyncOperation *This,
-        __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler *handler);
-
-    HRESULT (STDMETHODCALLTYPE *get_Completed)(
-        __x_ABI_CWindows_CFoundation_CIAsyncOperation *This,
-        __x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler **handler);
-
-    IInspectable * (STDMETHODCALLTYPE *GetResults)(
-        __x_ABI_CWindows_CFoundation_CIAsyncOperation *This);
-
-    END_INTERFACE
-} __x_ABI_CWindows_CFoundation_CIAsyncOperationVtbl;
-
-interface __x_ABI_CWindows_CFoundation_CIAsyncOperation {
-    CONST_VTBL __x_ABI_CWindows_CFoundation_CIAsyncOperationVtbl* lpVtbl;
-};
-
-#ifdef COBJMACROS
-#ifndef WIDL_C_INLINE_WRAPPERS
-/*** IUnknown methods ***/
-#define __x_ABI_CWindows_CFoundation_CIAsyncOperation_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define __x_ABI_CWindows_CFoundation_CIAsyncOperation_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define __x_ABI_CWindows_CFoundation_CIAsyncOperation_Release(This) (This)->lpVtbl->Release(This)
-/*** IInspectable methods ***/
-#define __x_ABI_CWindows_CFoundation_CIAsyncOperation_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
-#define __x_ABI_CWindows_CFoundation_CIAsyncOperation_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
-#define __x_ABI_CWindows_CFoundation_CIAsyncOperation_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
-/*** IAsyncInfo methods ***/
-#define __x_ABI_CWindows_CFoundation_CIAsyncOperation_get_Id(This,id) (This)->lpVtbl->get_Id(This,id)
-#define __x_ABI_CWindows_CFoundation_CIAsyncOperation_get_Status(This,status) (This)->lpVtbl->get_Status(This,status)
-#define __x_ABI_CWindows_CFoundation_CIAsyncOperation_get_ErrorCode(This,errorCode) (This)->lpVtbl->get_ErrorCode(This,errorCode)
-#define __x_ABI_CWindows_CFoundation_CIAsyncOperation_Cancel(This) (This)->lpVtbl->Cancel(This)
-#define __x_ABI_CWindows_CFoundation_CIAsyncOperation_Close(This) (This)->lpVtbl->Close(This)
-/*** IAsyncOperation methods ***/
-#define __x_ABI_CWindows_CFoundation_CIAsyncOperation_put_Completed(This,handler) (This)->lpVtbl->put_Completed(This,handler)
-#define __x_ABI_CWindows_CFoundation_CIAsyncOperation_get_Completed(This,handler) (This)->lpVtbl->get_Completed(This,handler)
-#define __x_ABI_CWindows_CFoundation_CIAsyncOperation_GetResults(This) (This)->lpVtbl->GetResults(This)
-#else
-/*** IUnknown methods ***/
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncOperation_QueryInterface(__x_ABI_CWindows_CFoundation_CIAsyncOperation* This,REFIID riid,void **ppvObject) {
-    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
-}
-static FORCEINLINE ULONG __x_ABI_CWindows_CFoundation_CIAsyncOperation_AddRef(__x_ABI_CWindows_CFoundation_CIAsyncOperation* This) {
-    return This->lpVtbl->AddRef(This);
-}
-static FORCEINLINE ULONG __x_ABI_CWindows_CFoundation_CIAsyncOperation_Release(__x_ABI_CWindows_CFoundation_CIAsyncOperation* This) {
-    return This->lpVtbl->Release(This);
-}
-/*** IInspectable methods ***/
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncOperation_GetIids(__x_ABI_CWindows_CFoundation_CIAsyncOperation* This,ULONG *iidCount,IID **iids) {
-    return This->lpVtbl->GetIids(This,iidCount,iids);
-}
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncOperation_GetRuntimeClassName(__x_ABI_CWindows_CFoundation_CIAsyncOperation* This,HSTRING *className) {
-    return This->lpVtbl->GetRuntimeClassName(This,className);
-}
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncOperation_GetTrustLevel(__x_ABI_CWindows_CFoundation_CIAsyncOperation* This,TrustLevel *trustLevel) {
-    return This->lpVtbl->GetTrustLevel(This,trustLevel);
-}
-/*** IAsyncInfo methods ***/
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncOperation_get_Id(__x_ABI_CWindows_CFoundation_CIAsyncOperation* This,unsigned int *id) {
-    return This->lpVtbl->get_Id(This,id);
-}
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncOperation_get_Status(__x_ABI_CWindows_CFoundation_CIAsyncOperation* This,enum __x_ABI_CWindows_CFoundation_CAsyncStatus *status) {
-    return This->lpVtbl->get_Status(This,status);
-}
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncOperation_get_ErrorCode(__x_ABI_CWindows_CFoundation_CIAsyncOperation* This,HRESULT *errorCode) {
-    return This->lpVtbl->get_ErrorCode(This,errorCode);
-}
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncOperation_Cancel(__x_ABI_CWindows_CFoundation_CIAsyncOperation* This) {
-    return This->lpVtbl->Cancel(This);
-}
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncOperation_Close(__x_ABI_CWindows_CFoundation_CIAsyncOperation* This) {
-    return This->lpVtbl->Close(This);
-}
-/*** IAsyncOperation methods ***/
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncOperation_put_Completed(__x_ABI_CWindows_CFoundation_CIAsyncOperation* This,__x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler *handler) {
-    return This->lpVtbl->put_Completed(This,handler);
-}
-static FORCEINLINE HRESULT __x_ABI_CWindows_CFoundation_CIAsyncOperation_get_Completed(__x_ABI_CWindows_CFoundation_CIAsyncOperation* This,__x_ABI_CWindows_CFoundation_CAsyncActionCompletedHandler **handler) {
-    return This->lpVtbl->get_Completed(This,handler);
-}
-static FORCEINLINE IInspectable * __x_ABI_CWindows_CFoundation_CIAsyncOperation_GetResults(__x_ABI_CWindows_CFoundation_CIAsyncOperation* This) {
-    return This->lpVtbl->GetResults(This);
-}
-#endif
-#ifdef WIDL_using_Windows_Foundation
-#define IID_IAsyncOperation IID___x_ABI_CWindows_CFoundation_CIAsyncOperation
-#define IAsyncOperationVtbl __x_ABI_CWindows_CFoundation_CIAsyncOperationVtbl
-#define IAsyncOperation __x_ABI_CWindows_CFoundation_CIAsyncOperation
-#define IAsyncOperation_QueryInterface __x_ABI_CWindows_CFoundation_CIAsyncOperation_QueryInterface
-#define IAsyncOperation_AddRef __x_ABI_CWindows_CFoundation_CIAsyncOperation_AddRef
-#define IAsyncOperation_Release __x_ABI_CWindows_CFoundation_CIAsyncOperation_Release
-#define IAsyncOperation_GetIids __x_ABI_CWindows_CFoundation_CIAsyncOperation_GetIids
-#define IAsyncOperation_GetRuntimeClassName __x_ABI_CWindows_CFoundation_CIAsyncOperation_GetRuntimeClassName
-#define IAsyncOperation_GetTrustLevel __x_ABI_CWindows_CFoundation_CIAsyncOperation_GetTrustLevel
-#define IAsyncOperation_get_Id __x_ABI_CWindows_CFoundation_CIAsyncOperation_get_Id
-#define IAsyncOperation_get_Status __x_ABI_CWindows_CFoundation_CIAsyncOperation_get_Status
-#define IAsyncOperation_get_ErrorCode __x_ABI_CWindows_CFoundation_CIAsyncOperation_get_ErrorCode
-#define IAsyncOperation_Cancel __x_ABI_CWindows_CFoundation_CIAsyncOperation_Cancel
-#define IAsyncOperation_Close __x_ABI_CWindows_CFoundation_CIAsyncOperation_Close
-#define IAsyncOperation_put_Completed __x_ABI_CWindows_CFoundation_CIAsyncOperation_put_Completed
-#define IAsyncOperation_get_Completed __x_ABI_CWindows_CFoundation_CIAsyncOperation_get_Completed
-#define IAsyncOperation_GetResults __x_ABI_CWindows_CFoundation_CIAsyncOperation_GetResults
-#endif /* WIDL_using_Windows_Foundation */
-#endif
-
-#endif
-
-#endif  /* ____x_ABI_CWindows_CFoundation_CIAsyncOperation_INTERFACE_DEFINED__ */
+#endif  /* ____FIAsyncOperation_1_boolean_INTERFACE_DEFINED__ */
 
 /* Begin additional prototypes for all interfaces */
 
+ULONG           __RPC_USER HSTRING_UserSize     (ULONG *, ULONG, HSTRING *);
+unsigned char * __RPC_USER HSTRING_UserMarshal  (ULONG *, unsigned char *, HSTRING *);
+unsigned char * __RPC_USER HSTRING_UserUnmarshal(ULONG *, unsigned char *, HSTRING *);
+void            __RPC_USER HSTRING_UserFree     (ULONG *, HSTRING *);
 
 /* End additional prototypes */
 
diff --git a/mingw-w64-headers/include/windows.foundation.idl b/mingw-w64-headers/include/windows.foundation.idl
index bfc93ae..c4dc454 100644
--- a/mingw-w64-headers/include/windows.foundation.idl
+++ b/mingw-w64-headers/include/windows.foundation.idl
@@ -1,7 +1,19 @@
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+/*
+ * Copyright 2015 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
 #ifdef __WIDL__
@@ -9,82 +21,112 @@
 #endif
 
 import "inspectable.idl";
+import "asyncinfo.idl";
 import "windowscontracts.idl";
+/* import "eventtoken.idl"; */
+/* import "ivectorchangedeventargs.idl"; */
 import "windows.foundation.collections.idl";
 
 namespace Windows {
-  namespace Foundation {
-    interface IAsyncInfo;
-    interface IAsyncAction;
-    interface IAsyncOperation;
-    interface AsyncActionCompletedHandler; // delegate
-    interface TypedEventHandler;           // delegate
-    struct    DateTime;
-    struct    EventRegistrationToken;
+    namespace Foundation {
+        typedef enum PropertyType PropertyType;
+        typedef struct Point Point;
+        typedef struct Size Size;
+        typedef struct Rect Rect;
+        typedef struct DateTime DateTime;
+        typedef struct TimeSpan TimeSpan;
 
-    namespace Collections {
-      interface IPropertySet;
+        [contract(Windows.Foundation.FoundationContract, 1.0)]
+        enum PropertyType {
+            Empty       = 0,
+            UInt8       = 1,
+            Int16       = 2,
+            UInt16      = 3,
+            Int32       = 4,
+            UInt32      = 5,
+            Int64       = 6,
+            UInt64      = 7,
+            Single      = 8,
+            Double      = 9,
+            Char16      = 10,
+            Boolean     = 11,
+            String      = 12,
+            Inspectable = 13,
+            DateTime    = 14,
+            TimeSpan    = 15,
+            Guid        = 16,
+            Point       = 17,
+            Size        = 18,
+            Rect        = 19,
+            OtherType   = 20,
+            UInt8Array       = 1025,
+            Int16Array       = 1026,
+            UInt16Array      = 1027,
+            Int32Array       = 1028,
+            UInt32Array      = 1029,
+            Int64Array       = 1030,
+            UInt64Array      = 1031,
+            SingleArray      = 1032,
+            DoubleArray      = 1033,
+            Char16Array      = 1034,
+            BooleanArray     = 1035,
+            StringArray      = 1036,
+            InspectableArray = 1037,
+            DateTimeArray    = 1038,
+            TimeSpanArray    = 1039,
+            GuidArray        = 1040,
+            PointArray       = 1041,
+            SizeArray        = 1042,
+            RectArray        = 1043,
+            OtherTypeArray   = 1044
+        };
+
+        [contract(Windows.Foundation.FoundationContract, 1.0)]
+        struct Point {
+            FLOAT X;
+            FLOAT Y;
+        };
+
+        [contract(Windows.Foundation.FoundationContract, 1.0)]
+        struct Size {
+            FLOAT Width;
+            FLOAT Height;
+        };
+
+        [contract(Windows.Foundation.FoundationContract, 1.0)]
+        struct Rect {
+            FLOAT X;
+            FLOAT Y;
+            FLOAT Width;
+            FLOAT Height;
+        };
+
+        [contract(Windows.Foundation.FoundationContract, 1.0)]
+        struct DateTime {
+            INT64 UniversalTime;
+        };
+
+        [contract(Windows.Foundation.FoundationContract, 1.0)]
+        struct TimeSpan {
+            INT64 Duration;
+        };
+
+        [
+            contract(Windows.Foundation.FoundationContract, 1.0),
+            uuid(96369f54-8eb6-48f0-abce-c1b211e627c3)
+        ]
+        interface IStringable : IInspectable
+        {
+            HRESULT ToString([out, retval] HSTRING *value);
+        }
     }
-  }
 }
 
 namespace Windows {
-  namespace Foundation {
-    typedef enum AsyncStatus {
-      Started,
-      Completed,
-      Canceled,
-      Error
-    } AsyncStatus;
-
-    typedef struct DateTime {
-      UINT64 UniversalTime;
-    } DateTime;
-
-    typedef struct EventRegistrationToken {
-      UINT64 Value;
-    } EventRegistrationToken;
-
-    [uuid(00000036-0000-0000-C000-000000000046)]
-    interface IAsyncInfo : IInspectable
-    {
-      [propget] HRESULT Id(unsigned int *id);
-      [propget] HRESULT Status(AsyncStatus *status);
-      [propget] HRESULT ErrorCode(HRESULT *errorCode);
-      HRESULT Cancel();
-      HRESULT Close();
+    namespace Foundation {
+        declare {
+            interface Windows.Foundation.AsyncOperationCompletedHandler<boolean>;
+            interface Windows.Foundation.IAsyncOperation<boolean>;
+        }
     }
-
-    [uuid(5A648006-843A-4DA9-865B-9D26E5DFAD7B)]
-    interface IASyncAction : IAsyncInfo {
-      [propput] HRESULT Completed(AsyncActionCompletedHandler* handler);
-      [propget] HRESULT Completed(AsyncActionCompletedHandler** handler);
-      HRESULT GetResults();
-    }
-
-    [uuid(A4ED5C81-76C9-40BD-8BE6-B1D90FB20AE7)]
-    interface AsyncActionCompletedHandler : IUnknown {
-      //FIXME: should support cyclic dependency
-      HRESULT Invoke(IAsyncAction *asyncAction, AsyncStatus status);
-    }
-
-    //FIXME: WHERE IS IT?
-    //generic <typename TResult>
-    [uuid("9fc2b0bb-e446-44e2-aa61-9cab8f636af2")]
-    interface IAsyncOperation : IAsyncInfo {
-      [propput] HRESULT Completed(AsyncActionCompletedHandler* handler);
-      [propget] HRESULT Completed(AsyncActionCompletedHandler** handler);
-      //FIXME: implement generics
-      /*TResult*/ IInspectable* GetResults();
-    }
-
-
-    namespace Collections {
-      //interface IVectorView;
-      /*[uuid(8A43ED9F-F4E6-4421-ACF9-1DAB2986820C)]
-      interface IPropertySet : IInspectable {
-        //
-      }*/
-    }
-  }
 }
diff --git a/mingw-w64-headers/include/windows.storage.h b/mingw-w64-headers/include/windows.storage.h
index d6aacd4..bc890f4 100644
--- a/mingw-w64-headers/include/windows.storage.h
+++ b/mingw-w64-headers/include/windows.storage.h
@@ -171,7 +171,7 @@
 /* Headers for imported files */
 
 #include <inspectable.h>
-#include <hstring.h>
+#include <eventtoken.h>
 #include <windows.foundation.h>
 
 #ifdef __cplusplus
@@ -193,21 +193,6 @@
 #endif /* __cplusplus */
 #endif
 
-#ifndef ____x_ABI_CWindows_CFoundation_CTypedEventHandler_FWD_DEFINED__
-#define ____x_ABI_CWindows_CFoundation_CTypedEventHandler_FWD_DEFINED__
-typedef interface __x_ABI_CWindows_CFoundation_CTypedEventHandler __x_ABI_CWindows_CFoundation_CTypedEventHandler;
-#ifdef __cplusplus
-#define __x_ABI_CWindows_CFoundation_CTypedEventHandler ABI::Windows::Foundation::TypedEventHandler
-namespace ABI {
-    namespace Windows {
-        namespace Foundation {
-            interface TypedEventHandler;
-        }
-    }
-}
-#endif /* __cplusplus */
-#endif
-
 #ifndef ____x_ABI_CWindows_CFoundation_CCollections_CIPropertySet_FWD_DEFINED__
 #define ____x_ABI_CWindows_CFoundation_CCollections_CIPropertySet_FWD_DEFINED__
 typedef interface __x_ABI_CWindows_CFoundation_CCollections_CIPropertySet __x_ABI_CWindows_CFoundation_CCollections_CIPropertySet;
@@ -1461,7 +1446,7 @@
                     ABI::Windows::Storage::IStorageFolder **value) = 0;
 
                 virtual HRESULT STDMETHODCALLTYPE DataChanged(
-                    struct EventRegistrationToken token) = 0;
+                    EventRegistrationToken token) = 0;
 
                 virtual HRESULT STDMETHODCALLTYPE SignalDataChanged(
                     ) = 0;
@@ -1549,7 +1534,7 @@
 
     HRESULT (STDMETHODCALLTYPE *DataChanged)(
         __x_ABI_CWindows_CStorage_CIApplicationData *This,
-        struct __x_ABI_CWindows_CFoundation_CEventRegistrationToken token);
+        EventRegistrationToken token);
 
     HRESULT (STDMETHODCALLTYPE *SignalDataChanged)(
         __x_ABI_CWindows_CStorage_CIApplicationData *This);
@@ -1637,7 +1622,7 @@
 static FORCEINLINE HRESULT __x_ABI_CWindows_CStorage_CIApplicationData_get_TemporaryFolder(__x_ABI_CWindows_CStorage_CIApplicationData* This,__x_ABI_CWindows_CStorage_CIStorageFolder **value) {
     return This->lpVtbl->get_TemporaryFolder(This,value);
 }
-static FORCEINLINE HRESULT __x_ABI_CWindows_CStorage_CIApplicationData_DataChanged(__x_ABI_CWindows_CStorage_CIApplicationData* This,struct __x_ABI_CWindows_CFoundation_CEventRegistrationToken token) {
+static FORCEINLINE HRESULT __x_ABI_CWindows_CStorage_CIApplicationData_DataChanged(__x_ABI_CWindows_CStorage_CIApplicationData* This,EventRegistrationToken token) {
     return This->lpVtbl->DataChanged(This,token);
 }
 static FORCEINLINE HRESULT __x_ABI_CWindows_CStorage_CIApplicationData_SignalDataChanged(__x_ABI_CWindows_CStorage_CIApplicationData* This) {
diff --git a/mingw-w64-headers/include/windows.storage.idl b/mingw-w64-headers/include/windows.storage.idl
index eac686e..dd29ec6 100644
--- a/mingw-w64-headers/include/windows.storage.idl
+++ b/mingw-w64-headers/include/windows.storage.idl
@@ -9,13 +9,12 @@
 #endif
 
 import "inspectable.idl";
-import "hstring.idl";
+import "eventtoken.idl";
 import "windows.foundation.idl";
 
 namespace Windows {
   namespace Foundation {
     interface IAsyncAction;
-    interface TypedEventHandler;
     //struct EventRegistrationToken;
 
     namespace Collections {
diff --git a/mingw-w64-headers/include/windows.system.threading.h b/mingw-w64-headers/include/windows.system.threading.h
index 7d43490..3311ac6 100644
--- a/mingw-w64-headers/include/windows.system.threading.h
+++ b/mingw-w64-headers/include/windows.system.threading.h
@@ -144,23 +144,6 @@
 #endif /* __cplusplus */
 #endif
 
-#ifdef __cplusplus
-} /* extern "C" */
-namespace ABI {
-    namespace Windows {
-        namespace Foundation {
-            struct TimeSpan;
-        }
-    }
-}
-extern "C" {
-#else
-struct __x_ABI_CWindows_CFoundation_CTimeSpan;
-#ifdef WIDL_using_Windows_Foundation
-#define TimeSpan __x_ABI_CWindows_CFoundation_CTimeSpan
-#endif /* WIDL_using_Windows_Foundation */
-#endif
-
 #ifndef ____x_ABI_CWindows_CSystem_CThreading_CTimerElapsedHandler_FWD_DEFINED__
 #define ____x_ABI_CWindows_CSystem_CThreading_CTimerElapsedHandler_FWD_DEFINED__
 typedef interface __x_ABI_CWindows_CSystem_CThreading_CTimerElapsedHandler __x_ABI_CWindows_CSystem_CThreading_CTimerElapsedHandler;
diff --git a/mingw-w64-headers/include/windows.system.threading.idl b/mingw-w64-headers/include/windows.system.threading.idl
index 8645850..502982e 100644
--- a/mingw-w64-headers/include/windows.system.threading.idl
+++ b/mingw-w64-headers/include/windows.system.threading.idl
@@ -14,7 +14,6 @@
 namespace Windows {
     namespace Foundation {
         interface IAsyncAction;
-        struct TimeSpan;
     }
 
     namespace System {
diff --git a/mingw-w64-headers/wine-import.sh b/mingw-w64-headers/wine-import.sh
index 658df6b..3efac13 100755
--- a/mingw-w64-headers/wine-import.sh
+++ b/mingw-w64-headers/wine-import.sh
@@ -130,6 +130,7 @@
 for f in \
 	amstream \
 	amvideo \
+	asyncinfo \
 	austream \
 	ctfutb \
 	d3d10 \
@@ -169,6 +170,7 @@
 	dxgitype \
 	dxva2api \
 	endpointvolume \
+	eventtoken \
 	exdisp \
 	fusion \
 	icftypes \
@@ -196,6 +198,7 @@
 	wincodec \
 	wincodecsdk \
 	windowscontracts \
+	windows.foundation \
 	windows.foundation.collections \
 	windows.media.speechsynthesis \
 	wmdrmsdk \
