diff --git a/mingw-w64-headers/Makefile.in b/mingw-w64-headers/Makefile.in
index 5e95a66..c06a9d8 100644
--- a/mingw-w64-headers/Makefile.in
+++ b/mingw-w64-headers/Makefile.in
@@ -615,6 +615,7 @@
 @HAVE_WIDL_TRUE@  include/windows.graphics.capture.interop.idl \
 @HAVE_WIDL_TRUE@  include/windows.graphics.directx.idl \
 @HAVE_WIDL_TRUE@  include/windows.graphics.directx.direct3d11.idl \
+@HAVE_WIDL_TRUE@  include/windows.graphics.display.idl \
 @HAVE_WIDL_TRUE@  include/windows.graphics.effects.idl \
 @HAVE_WIDL_TRUE@  include/windows.graphics.holographic.idl \
 @HAVE_WIDL_TRUE@  include/windows.graphics.idl \
@@ -664,6 +665,8 @@
 @HAVE_WIDL_TRUE@  include/windows.ui.composition.interop.idl \
 @HAVE_WIDL_TRUE@  include/windows.ui.core.idl \
 @HAVE_WIDL_TRUE@  include/windows.ui.notifications.idl \
+@HAVE_WIDL_TRUE@  include/windows.ui.text.core.idl \
+@HAVE_WIDL_TRUE@  include/windows.ui.text.idl \
 @HAVE_WIDL_TRUE@  include/windows.ui.viewmanagement.core.idl \
 @HAVE_WIDL_TRUE@  include/windows.ui.viewmanagement.idl \
 @HAVE_WIDL_TRUE@  include/windows.ui.windowmanagement.idl \
diff --git a/mingw-w64-headers/include/activation.h b/mingw-w64-headers/include/activation.h
index 2df4e93..7ad1163 100644
--- a/mingw-w64-headers/include/activation.h
+++ b/mingw-w64-headers/include/activation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/activation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/activation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/activaut.h b/mingw-w64-headers/include/activaut.h
index 1101824..2eaaf97 100644
--- a/mingw-w64-headers/include/activaut.h
+++ b/mingw-w64-headers/include/activaut.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/activaut.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/activaut.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/activdbg.h b/mingw-w64-headers/include/activdbg.h
index 9d4018b..3c73342 100644
--- a/mingw-w64-headers/include/activdbg.h
+++ b/mingw-w64-headers/include/activdbg.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/activdbg.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/activdbg.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/activdbg100.h b/mingw-w64-headers/include/activdbg100.h
index 4bab3c0..3f706fa 100644
--- a/mingw-w64-headers/include/activdbg100.h
+++ b/mingw-w64-headers/include/activdbg100.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/activdbg100.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/activdbg100.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/activprof.h b/mingw-w64-headers/include/activprof.h
index 3ee29b6..1a61fdc 100644
--- a/mingw-w64-headers/include/activprof.h
+++ b/mingw-w64-headers/include/activprof.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/activprof.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/activprof.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/activscp.h b/mingw-w64-headers/include/activscp.h
index 2b9b42b..2697c5c 100644
--- a/mingw-w64-headers/include/activscp.h
+++ b/mingw-w64-headers/include/activscp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/activscp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/activscp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/adhoc.h b/mingw-w64-headers/include/adhoc.h
index 0baec86..bf00b87 100644
--- a/mingw-w64-headers/include/adhoc.h
+++ b/mingw-w64-headers/include/adhoc.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/adhoc.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/adhoc.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/alg.h b/mingw-w64-headers/include/alg.h
index 84ecbf9..a2297e9 100644
--- a/mingw-w64-headers/include/alg.h
+++ b/mingw-w64-headers/include/alg.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/alg.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/alg.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/amstream.h b/mingw-w64-headers/include/amstream.h
index 4119262..4cdde5e 100644
--- a/mingw-w64-headers/include/amstream.h
+++ b/mingw-w64-headers/include/amstream.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/amstream.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/amstream.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/amvideo.h b/mingw-w64-headers/include/amvideo.h
index 73a1db3..2c2d9dd 100644
--- a/mingw-w64-headers/include/amvideo.h
+++ b/mingw-w64-headers/include/amvideo.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/amvideo.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/amvideo.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/asyncinfo.h b/mingw-w64-headers/include/asyncinfo.h
index 59f6be5..63e8f32 100644
--- a/mingw-w64-headers/include/asyncinfo.h
+++ b/mingw-w64-headers/include/asyncinfo.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/asyncinfo.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/asyncinfo.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/audioclient.h b/mingw-w64-headers/include/audioclient.h
index 8f9bfa7..fa87185 100644
--- a/mingw-w64-headers/include/audioclient.h
+++ b/mingw-w64-headers/include/audioclient.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/audioclient.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/audioclient.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/audioendpoints.h b/mingw-w64-headers/include/audioendpoints.h
index ff42984..2884dcb 100644
--- a/mingw-w64-headers/include/audioendpoints.h
+++ b/mingw-w64-headers/include/audioendpoints.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/audioendpoints.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/audioendpoints.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/audiopolicy.h b/mingw-w64-headers/include/audiopolicy.h
index d5a3796..d3d56e6 100644
--- a/mingw-w64-headers/include/audiopolicy.h
+++ b/mingw-w64-headers/include/audiopolicy.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/audiopolicy.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/audiopolicy.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/austream.h b/mingw-w64-headers/include/austream.h
index 9bf4790..220f134 100644
--- a/mingw-w64-headers/include/austream.h
+++ b/mingw-w64-headers/include/austream.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/austream.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/austream.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bdaiface.h b/mingw-w64-headers/include/bdaiface.h
index bc24280..0c8de0a 100644
--- a/mingw-w64-headers/include/bdaiface.h
+++ b/mingw-w64-headers/include/bdaiface.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/bdaiface.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/bdaiface.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bits.h b/mingw-w64-headers/include/bits.h
index db8d2e6..38a1934 100644
--- a/mingw-w64-headers/include/bits.h
+++ b/mingw-w64-headers/include/bits.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/bits.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/bits.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bits1_5.h b/mingw-w64-headers/include/bits1_5.h
index a23ce46..c56450a 100644
--- a/mingw-w64-headers/include/bits1_5.h
+++ b/mingw-w64-headers/include/bits1_5.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/bits1_5.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/bits1_5.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bits2_0.h b/mingw-w64-headers/include/bits2_0.h
index 8ea6143..470f622 100644
--- a/mingw-w64-headers/include/bits2_0.h
+++ b/mingw-w64-headers/include/bits2_0.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/bits2_0.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/bits2_0.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bits2_5.h b/mingw-w64-headers/include/bits2_5.h
index 65c98af..e5461df 100644
--- a/mingw-w64-headers/include/bits2_5.h
+++ b/mingw-w64-headers/include/bits2_5.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/bits2_5.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/bits2_5.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bits3_0.h b/mingw-w64-headers/include/bits3_0.h
index 2f1f58e..00bd1b5 100644
--- a/mingw-w64-headers/include/bits3_0.h
+++ b/mingw-w64-headers/include/bits3_0.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/bits3_0.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/bits3_0.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/bits5_0.h b/mingw-w64-headers/include/bits5_0.h
index 2ef4ee1..dbf7bd5 100644
--- a/mingw-w64-headers/include/bits5_0.h
+++ b/mingw-w64-headers/include/bits5_0.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/bits5_0.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/bits5_0.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/comadmin.h b/mingw-w64-headers/include/comadmin.h
index 584fe95..806b288 100644
--- a/mingw-w64-headers/include/comadmin.h
+++ b/mingw-w64-headers/include/comadmin.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/comadmin.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/comadmin.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/comcat.h b/mingw-w64-headers/include/comcat.h
index 387cce7..0d1e854 100644
--- a/mingw-w64-headers/include/comcat.h
+++ b/mingw-w64-headers/include/comcat.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/comcat.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/comcat.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/commoncontrols.h b/mingw-w64-headers/include/commoncontrols.h
index 1a08339..aceb9cf 100644
--- a/mingw-w64-headers/include/commoncontrols.h
+++ b/mingw-w64-headers/include/commoncontrols.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/commoncontrols.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/commoncontrols.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/control.h b/mingw-w64-headers/include/control.h
index 397116b..05ccaa7 100644
--- a/mingw-w64-headers/include/control.h
+++ b/mingw-w64-headers/include/control.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/control.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/control.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/credentialprovider.h b/mingw-w64-headers/include/credentialprovider.h
index 76d12f5..b51724d 100644
--- a/mingw-w64-headers/include/credentialprovider.h
+++ b/mingw-w64-headers/include/credentialprovider.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/credentialprovider.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/credentialprovider.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/ctfutb.h b/mingw-w64-headers/include/ctfutb.h
index 8461259..3f39298 100644
--- a/mingw-w64-headers/include/ctfutb.h
+++ b/mingw-w64-headers/include/ctfutb.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/ctfutb.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/ctfutb.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/ctxtcall.h b/mingw-w64-headers/include/ctxtcall.h
index 0f75869..e1f7978 100644
--- a/mingw-w64-headers/include/ctxtcall.h
+++ b/mingw-w64-headers/include/ctxtcall.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/ctxtcall.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/ctxtcall.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d10.h b/mingw-w64-headers/include/d3d10.h
index bf039a4..25f943c 100644
--- a/mingw-w64-headers/include/d3d10.h
+++ b/mingw-w64-headers/include/d3d10.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/d3d10.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/d3d10.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d10_1.h b/mingw-w64-headers/include/d3d10_1.h
index 6675289..a18f314 100644
--- a/mingw-w64-headers/include/d3d10_1.h
+++ b/mingw-w64-headers/include/d3d10_1.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/d3d10_1.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/d3d10_1.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d10effect.h b/mingw-w64-headers/include/d3d10effect.h
index 3e4d960..6cc6e3d 100644
--- a/mingw-w64-headers/include/d3d10effect.h
+++ b/mingw-w64-headers/include/d3d10effect.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/d3d10effect.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/d3d10effect.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d10sdklayers.h b/mingw-w64-headers/include/d3d10sdklayers.h
index d891ee0..45660cf 100644
--- a/mingw-w64-headers/include/d3d10sdklayers.h
+++ b/mingw-w64-headers/include/d3d10sdklayers.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/d3d10sdklayers.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/d3d10sdklayers.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d10shader.h b/mingw-w64-headers/include/d3d10shader.h
index c518793..738059e 100644
--- a/mingw-w64-headers/include/d3d10shader.h
+++ b/mingw-w64-headers/include/d3d10shader.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/d3d10shader.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/d3d10shader.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11.h b/mingw-w64-headers/include/d3d11.h
index cf3ef77..4478a77 100644
--- a/mingw-w64-headers/include/d3d11.h
+++ b/mingw-w64-headers/include/d3d11.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/d3d11.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/d3d11.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11_1.h b/mingw-w64-headers/include/d3d11_1.h
index 5d33df4..04c3dba 100644
--- a/mingw-w64-headers/include/d3d11_1.h
+++ b/mingw-w64-headers/include/d3d11_1.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/d3d11_1.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/d3d11_1.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11_2.h b/mingw-w64-headers/include/d3d11_2.h
index 5c53d27..4fe15fc 100644
--- a/mingw-w64-headers/include/d3d11_2.h
+++ b/mingw-w64-headers/include/d3d11_2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/d3d11_2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/d3d11_2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11_3.h b/mingw-w64-headers/include/d3d11_3.h
index a21e61e..2af7b08 100644
--- a/mingw-w64-headers/include/d3d11_3.h
+++ b/mingw-w64-headers/include/d3d11_3.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/d3d11_3.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/d3d11_3.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11_4.h b/mingw-w64-headers/include/d3d11_4.h
index 43ac2f7..3579521 100644
--- a/mingw-w64-headers/include/d3d11_4.h
+++ b/mingw-w64-headers/include/d3d11_4.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/d3d11_4.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/d3d11_4.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11on12.h b/mingw-w64-headers/include/d3d11on12.h
index 41ef2c1..7e8fc1c 100644
--- a/mingw-w64-headers/include/d3d11on12.h
+++ b/mingw-w64-headers/include/d3d11on12.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/d3d11on12.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/d3d11on12.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11sdklayers.h b/mingw-w64-headers/include/d3d11sdklayers.h
index 1d69881..0bc532f 100644
--- a/mingw-w64-headers/include/d3d11sdklayers.h
+++ b/mingw-w64-headers/include/d3d11sdklayers.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/d3d11sdklayers.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/d3d11sdklayers.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d12.h b/mingw-w64-headers/include/d3d12.h
index 77ec366..5246cf0 100644
--- a/mingw-w64-headers/include/d3d12.h
+++ b/mingw-w64-headers/include/d3d12.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/d3d12.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/d3d12.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d12sdklayers.h b/mingw-w64-headers/include/d3d12sdklayers.h
index 3d91e7d..7864d56 100644
--- a/mingw-w64-headers/include/d3d12sdklayers.h
+++ b/mingw-w64-headers/include/d3d12sdklayers.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/d3d12sdklayers.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/d3d12sdklayers.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d12shader.h b/mingw-w64-headers/include/d3d12shader.h
index f7f23f3..e65d65d 100644
--- a/mingw-w64-headers/include/d3d12shader.h
+++ b/mingw-w64-headers/include/d3d12shader.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/d3d12shader.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/d3d12shader.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d12video.h b/mingw-w64-headers/include/d3d12video.h
index 48d92f0..71831be 100644
--- a/mingw-w64-headers/include/d3d12video.h
+++ b/mingw-w64-headers/include/d3d12video.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/d3d12video.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/d3d12video.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3dcommon.h b/mingw-w64-headers/include/d3dcommon.h
index 41e47b9..67aa519 100644
--- a/mingw-w64-headers/include/d3dcommon.h
+++ b/mingw-w64-headers/include/d3dcommon.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/d3dcommon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/d3dcommon.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dbgprop.h b/mingw-w64-headers/include/dbgprop.h
index c8e54b3..69ce894 100644
--- a/mingw-w64-headers/include/dbgprop.h
+++ b/mingw-w64-headers/include/dbgprop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dbgprop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dbgprop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dcommon.h b/mingw-w64-headers/include/dcommon.h
index 9bab218..70d9fe6 100644
--- a/mingw-w64-headers/include/dcommon.h
+++ b/mingw-w64-headers/include/dcommon.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dcommon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dcommon.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dcompanimation.h b/mingw-w64-headers/include/dcompanimation.h
index a6f9308..273144c 100644
--- a/mingw-w64-headers/include/dcompanimation.h
+++ b/mingw-w64-headers/include/dcompanimation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dcompanimation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dcompanimation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/ddstream.h b/mingw-w64-headers/include/ddstream.h
index 274792a..b910f16 100644
--- a/mingw-w64-headers/include/ddstream.h
+++ b/mingw-w64-headers/include/ddstream.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/ddstream.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/ddstream.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/devicetopology.h b/mingw-w64-headers/include/devicetopology.h
index f21a4af..b8446c6 100644
--- a/mingw-w64-headers/include/devicetopology.h
+++ b/mingw-w64-headers/include/devicetopology.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/devicetopology.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/devicetopology.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dimm.h b/mingw-w64-headers/include/dimm.h
index 728742c..b752db2 100644
--- a/mingw-w64-headers/include/dimm.h
+++ b/mingw-w64-headers/include/dimm.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dimm.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dimm.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dinputd.h b/mingw-w64-headers/include/dinputd.h
index 5f9af52..6d51530 100644
--- a/mingw-w64-headers/include/dinputd.h
+++ b/mingw-w64-headers/include/dinputd.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dinputd.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dinputd.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/directmanipulation.h b/mingw-w64-headers/include/directmanipulation.h
index 143b03d..1a16bfa 100644
--- a/mingw-w64-headers/include/directmanipulation.h
+++ b/mingw-w64-headers/include/directmanipulation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/directmanipulation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/directmanipulation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dispex.h b/mingw-w64-headers/include/dispex.h
index a0fa985..38fb0a9 100644
--- a/mingw-w64-headers/include/dispex.h
+++ b/mingw-w64-headers/include/dispex.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dispex.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dispex.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dmodshow.h b/mingw-w64-headers/include/dmodshow.h
index 28c08f6..b0e69ef 100644
--- a/mingw-w64-headers/include/dmodshow.h
+++ b/mingw-w64-headers/include/dmodshow.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dmodshow.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dmodshow.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/docobj.h b/mingw-w64-headers/include/docobj.h
index b3fc380..bec92af 100644
--- a/mingw-w64-headers/include/docobj.h
+++ b/mingw-w64-headers/include/docobj.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/docobj.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/docobj.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/docobjectservice.h b/mingw-w64-headers/include/docobjectservice.h
index cf871ed..80fea46 100644
--- a/mingw-w64-headers/include/docobjectservice.h
+++ b/mingw-w64-headers/include/docobjectservice.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/docobjectservice.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/docobjectservice.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/documenttarget.h b/mingw-w64-headers/include/documenttarget.h
index ad1d03d..5b82b0d 100644
--- a/mingw-w64-headers/include/documenttarget.h
+++ b/mingw-w64-headers/include/documenttarget.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/documenttarget.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/documenttarget.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/downloadmgr.h b/mingw-w64-headers/include/downloadmgr.h
index 4266d8c..7eb1bcd 100644
--- a/mingw-w64-headers/include/downloadmgr.h
+++ b/mingw-w64-headers/include/downloadmgr.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/downloadmgr.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/downloadmgr.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/drmexternals.h b/mingw-w64-headers/include/drmexternals.h
index a549254..bd7ecea 100644
--- a/mingw-w64-headers/include/drmexternals.h
+++ b/mingw-w64-headers/include/drmexternals.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/drmexternals.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/drmexternals.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dvdif.h b/mingw-w64-headers/include/dvdif.h
index 8919bcd..d17e6d5 100644
--- a/mingw-w64-headers/include/dvdif.h
+++ b/mingw-w64-headers/include/dvdif.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dvdif.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dvdif.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dwrite.h b/mingw-w64-headers/include/dwrite.h
index ba34d3e..304fe17 100644
--- a/mingw-w64-headers/include/dwrite.h
+++ b/mingw-w64-headers/include/dwrite.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dwrite.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dwrite.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dwrite_1.h b/mingw-w64-headers/include/dwrite_1.h
index 3dbc8c5..3024e9e 100644
--- a/mingw-w64-headers/include/dwrite_1.h
+++ b/mingw-w64-headers/include/dwrite_1.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dwrite_1.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dwrite_1.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dwrite_2.h b/mingw-w64-headers/include/dwrite_2.h
index 45bbcf8..139fc35 100644
--- a/mingw-w64-headers/include/dwrite_2.h
+++ b/mingw-w64-headers/include/dwrite_2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dwrite_2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dwrite_2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dwrite_3.h b/mingw-w64-headers/include/dwrite_3.h
index f621ed4..542a84b 100644
--- a/mingw-w64-headers/include/dwrite_3.h
+++ b/mingw-w64-headers/include/dwrite_3.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dwrite_3.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dwrite_3.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi.h b/mingw-w64-headers/include/dxgi.h
index d56b28e..fac4d37 100644
--- a/mingw-w64-headers/include/dxgi.h
+++ b/mingw-w64-headers/include/dxgi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dxgi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dxgi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_2.h b/mingw-w64-headers/include/dxgi1_2.h
index 00c7a76..04f6895 100644
--- a/mingw-w64-headers/include/dxgi1_2.h
+++ b/mingw-w64-headers/include/dxgi1_2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dxgi1_2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dxgi1_2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_3.h b/mingw-w64-headers/include/dxgi1_3.h
index d67dacc..64eb065 100644
--- a/mingw-w64-headers/include/dxgi1_3.h
+++ b/mingw-w64-headers/include/dxgi1_3.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dxgi1_3.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dxgi1_3.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_4.h b/mingw-w64-headers/include/dxgi1_4.h
index 6675ad2..b6b6b63 100644
--- a/mingw-w64-headers/include/dxgi1_4.h
+++ b/mingw-w64-headers/include/dxgi1_4.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dxgi1_4.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dxgi1_4.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_5.h b/mingw-w64-headers/include/dxgi1_5.h
index ac04287..d149d0b 100644
--- a/mingw-w64-headers/include/dxgi1_5.h
+++ b/mingw-w64-headers/include/dxgi1_5.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dxgi1_5.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dxgi1_5.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_6.h b/mingw-w64-headers/include/dxgi1_6.h
index 2d5a044..b05f978 100644
--- a/mingw-w64-headers/include/dxgi1_6.h
+++ b/mingw-w64-headers/include/dxgi1_6.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dxgi1_6.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dxgi1_6.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgicommon.h b/mingw-w64-headers/include/dxgicommon.h
index 0c69d28..edacea5 100644
--- a/mingw-w64-headers/include/dxgicommon.h
+++ b/mingw-w64-headers/include/dxgicommon.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dxgicommon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dxgicommon.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgidebug.h b/mingw-w64-headers/include/dxgidebug.h
index 9907503..514842e 100644
--- a/mingw-w64-headers/include/dxgidebug.h
+++ b/mingw-w64-headers/include/dxgidebug.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dxgidebug.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dxgidebug.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgiformat.h b/mingw-w64-headers/include/dxgiformat.h
index 7b8041e..fa08126 100644
--- a/mingw-w64-headers/include/dxgiformat.h
+++ b/mingw-w64-headers/include/dxgiformat.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dxgiformat.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dxgiformat.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgitype.h b/mingw-w64-headers/include/dxgitype.h
index 592ef77..7750fe4 100644
--- a/mingw-w64-headers/include/dxgitype.h
+++ b/mingw-w64-headers/include/dxgitype.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dxgitype.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dxgitype.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxva2api.h b/mingw-w64-headers/include/dxva2api.h
index d4ef521..21d9a46 100644
--- a/mingw-w64-headers/include/dxva2api.h
+++ b/mingw-w64-headers/include/dxva2api.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dxva2api.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dxva2api.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxvahd.h b/mingw-w64-headers/include/dxvahd.h
index 1b65af0..f90b3f2 100644
--- a/mingw-w64-headers/include/dxvahd.h
+++ b/mingw-w64-headers/include/dxvahd.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/dxvahd.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/dxvahd.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/endpointvolume.h b/mingw-w64-headers/include/endpointvolume.h
index e29495a..7d86179 100644
--- a/mingw-w64-headers/include/endpointvolume.h
+++ b/mingw-w64-headers/include/endpointvolume.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/endpointvolume.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/endpointvolume.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/eventtoken.h b/mingw-w64-headers/include/eventtoken.h
index 930dbe7..3f5db12 100644
--- a/mingw-w64-headers/include/eventtoken.h
+++ b/mingw-w64-headers/include/eventtoken.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/eventtoken.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/eventtoken.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/evr.h b/mingw-w64-headers/include/evr.h
index f44dc1c..671e7ec 100644
--- a/mingw-w64-headers/include/evr.h
+++ b/mingw-w64-headers/include/evr.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/evr.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/evr.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/evr9.h b/mingw-w64-headers/include/evr9.h
index 4f7adb9..af1d6a1 100644
--- a/mingw-w64-headers/include/evr9.h
+++ b/mingw-w64-headers/include/evr9.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/evr9.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/evr9.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/exdisp.h b/mingw-w64-headers/include/exdisp.h
index 86b5b1f..51e81da 100644
--- a/mingw-w64-headers/include/exdisp.h
+++ b/mingw-w64-headers/include/exdisp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/exdisp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/exdisp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/filter.h b/mingw-w64-headers/include/filter.h
index ff0bb6b..750a969 100644
--- a/mingw-w64-headers/include/filter.h
+++ b/mingw-w64-headers/include/filter.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/filter.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/filter.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fsrm.h b/mingw-w64-headers/include/fsrm.h
index 0e7dc1b..c7921f5 100644
--- a/mingw-w64-headers/include/fsrm.h
+++ b/mingw-w64-headers/include/fsrm.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/fsrm.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/fsrm.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fsrmenums.h b/mingw-w64-headers/include/fsrmenums.h
index 5329a1b..65df94c 100644
--- a/mingw-w64-headers/include/fsrmenums.h
+++ b/mingw-w64-headers/include/fsrmenums.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/fsrmenums.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/fsrmenums.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fsrmquota.h b/mingw-w64-headers/include/fsrmquota.h
index 3bd576a..c942db4 100644
--- a/mingw-w64-headers/include/fsrmquota.h
+++ b/mingw-w64-headers/include/fsrmquota.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/fsrmquota.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/fsrmquota.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fsrmreports.h b/mingw-w64-headers/include/fsrmreports.h
index 6ea6ef5..8aba526 100644
--- a/mingw-w64-headers/include/fsrmreports.h
+++ b/mingw-w64-headers/include/fsrmreports.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/fsrmreports.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/fsrmreports.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fsrmscreen.h b/mingw-w64-headers/include/fsrmscreen.h
index ca3dfea..da5774a 100644
--- a/mingw-w64-headers/include/fsrmscreen.h
+++ b/mingw-w64-headers/include/fsrmscreen.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/fsrmscreen.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/fsrmscreen.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fusion.h b/mingw-w64-headers/include/fusion.h
index 513562c..2547baa 100644
--- a/mingw-w64-headers/include/fusion.h
+++ b/mingw-w64-headers/include/fusion.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/fusion.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/fusion.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fwptypes.h b/mingw-w64-headers/include/fwptypes.h
index c40470b..8ac9b5e 100644
--- a/mingw-w64-headers/include/fwptypes.h
+++ b/mingw-w64-headers/include/fwptypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/fwptypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/fwptypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/hstring.h b/mingw-w64-headers/include/hstring.h
index 8fce1e3..f2fbbe8 100644
--- a/mingw-w64-headers/include/hstring.h
+++ b/mingw-w64-headers/include/hstring.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/hstring.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/hstring.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/httprequest.h b/mingw-w64-headers/include/httprequest.h
index cd98205..8688dce 100644
--- a/mingw-w64-headers/include/httprequest.h
+++ b/mingw-w64-headers/include/httprequest.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/httprequest.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/httprequest.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/icftypes.h b/mingw-w64-headers/include/icftypes.h
index d2a5ac2..1bbeacb 100644
--- a/mingw-w64-headers/include/icftypes.h
+++ b/mingw-w64-headers/include/icftypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/icftypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/icftypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/icodecapi.h b/mingw-w64-headers/include/icodecapi.h
index 0777840..a564425 100644
--- a/mingw-w64-headers/include/icodecapi.h
+++ b/mingw-w64-headers/include/icodecapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/icodecapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/icodecapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/iketypes.h b/mingw-w64-headers/include/iketypes.h
index ec6ea16..bc79c9a 100644
--- a/mingw-w64-headers/include/iketypes.h
+++ b/mingw-w64-headers/include/iketypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/iketypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/iketypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/inputpaneinterop.h b/mingw-w64-headers/include/inputpaneinterop.h
index 007642e..05ab06a 100644
--- a/mingw-w64-headers/include/inputpaneinterop.h
+++ b/mingw-w64-headers/include/inputpaneinterop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/inputpaneinterop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/inputpaneinterop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/inputscope.h b/mingw-w64-headers/include/inputscope.h
index c5508ff..7bf0f75 100644
--- a/mingw-w64-headers/include/inputscope.h
+++ b/mingw-w64-headers/include/inputscope.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/inputscope.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/inputscope.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/inspectable.h b/mingw-w64-headers/include/inspectable.h
index a3b55b5..4948bf8 100644
--- a/mingw-w64-headers/include/inspectable.h
+++ b/mingw-w64-headers/include/inspectable.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/inspectable.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/inspectable.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/ivectorchangedeventargs.h b/mingw-w64-headers/include/ivectorchangedeventargs.h
index 20ecb46..46175c0 100644
--- a/mingw-w64-headers/include/ivectorchangedeventargs.h
+++ b/mingw-w64-headers/include/ivectorchangedeventargs.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/ivectorchangedeventargs.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/ivectorchangedeventargs.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/iwscapi.h b/mingw-w64-headers/include/iwscapi.h
index e4ff0f4..1bb148e 100644
--- a/mingw-w64-headers/include/iwscapi.h
+++ b/mingw-w64-headers/include/iwscapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/iwscapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/iwscapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/locationapi.h b/mingw-w64-headers/include/locationapi.h
index 744ac61..8d26621 100644
--- a/mingw-w64-headers/include/locationapi.h
+++ b/mingw-w64-headers/include/locationapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/locationapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/locationapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mediaobj.h b/mingw-w64-headers/include/mediaobj.h
index 44b5935..2de4b6c 100644
--- a/mingw-w64-headers/include/mediaobj.h
+++ b/mingw-w64-headers/include/mediaobj.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/mediaobj.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/mediaobj.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/medparam.h b/mingw-w64-headers/include/medparam.h
index 5c487a8..cc0736a 100644
--- a/mingw-w64-headers/include/medparam.h
+++ b/mingw-w64-headers/include/medparam.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/medparam.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/medparam.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfcaptureengine.h b/mingw-w64-headers/include/mfcaptureengine.h
index 7a026a0..49cad9a 100644
--- a/mingw-w64-headers/include/mfcaptureengine.h
+++ b/mingw-w64-headers/include/mfcaptureengine.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/mfcaptureengine.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/mfcaptureengine.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfd3d12.h b/mingw-w64-headers/include/mfd3d12.h
index bac2f4c..0471b4b 100644
--- a/mingw-w64-headers/include/mfd3d12.h
+++ b/mingw-w64-headers/include/mfd3d12.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/mfd3d12.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/mfd3d12.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfidl.h b/mingw-w64-headers/include/mfidl.h
index 2af946d..2626b59 100644
--- a/mingw-w64-headers/include/mfidl.h
+++ b/mingw-w64-headers/include/mfidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/mfidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/mfidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfmediacapture.h b/mingw-w64-headers/include/mfmediacapture.h
index c3e5ba9..cb04544 100644
--- a/mingw-w64-headers/include/mfmediacapture.h
+++ b/mingw-w64-headers/include/mfmediacapture.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/mfmediacapture.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/mfmediacapture.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfmediaengine.h b/mingw-w64-headers/include/mfmediaengine.h
index 065308b..4cae485 100644
--- a/mingw-w64-headers/include/mfmediaengine.h
+++ b/mingw-w64-headers/include/mfmediaengine.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/mfmediaengine.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/mfmediaengine.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
@@ -66,6 +66,46 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef __IMFMediaSourceExtensionNotify_FWD_DEFINED__
+#define __IMFMediaSourceExtensionNotify_FWD_DEFINED__
+typedef interface IMFMediaSourceExtensionNotify IMFMediaSourceExtensionNotify;
+#ifdef __cplusplus
+interface IMFMediaSourceExtensionNotify;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IMFSourceBufferNotify_FWD_DEFINED__
+#define __IMFSourceBufferNotify_FWD_DEFINED__
+typedef interface IMFSourceBufferNotify IMFSourceBufferNotify;
+#ifdef __cplusplus
+interface IMFSourceBufferNotify;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IMFSourceBuffer_FWD_DEFINED__
+#define __IMFSourceBuffer_FWD_DEFINED__
+typedef interface IMFSourceBuffer IMFSourceBuffer;
+#ifdef __cplusplus
+interface IMFSourceBuffer;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IMFSourceBufferList_FWD_DEFINED__
+#define __IMFSourceBufferList_FWD_DEFINED__
+typedef interface IMFSourceBufferList IMFSourceBufferList;
+#ifdef __cplusplus
+interface IMFSourceBufferList;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IMFMediaSourceExtension_FWD_DEFINED__
+#define __IMFMediaSourceExtension_FWD_DEFINED__
+typedef interface IMFMediaSourceExtension IMFMediaSourceExtension;
+#ifdef __cplusplus
+interface IMFMediaSourceExtension;
+#endif /* __cplusplus */
+#endif
+
 #ifndef __IMFMediaEngineNotify_FWD_DEFINED__
 #define __IMFMediaEngineNotify_FWD_DEFINED__
 typedef interface IMFMediaEngineNotify IMFMediaEngineNotify;
@@ -90,6 +130,54 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef __IMFMediaKeySessionNotify_FWD_DEFINED__
+#define __IMFMediaKeySessionNotify_FWD_DEFINED__
+typedef interface IMFMediaKeySessionNotify IMFMediaKeySessionNotify;
+#ifdef __cplusplus
+interface IMFMediaKeySessionNotify;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IMFMediaKeySession_FWD_DEFINED__
+#define __IMFMediaKeySession_FWD_DEFINED__
+typedef interface IMFMediaKeySession IMFMediaKeySession;
+#ifdef __cplusplus
+interface IMFMediaKeySession;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IMFCdmSuspendNotify_FWD_DEFINED__
+#define __IMFCdmSuspendNotify_FWD_DEFINED__
+typedef interface IMFCdmSuspendNotify IMFCdmSuspendNotify;
+#ifdef __cplusplus
+interface IMFCdmSuspendNotify;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IMFMediaKeys_FWD_DEFINED__
+#define __IMFMediaKeys_FWD_DEFINED__
+typedef interface IMFMediaKeys IMFMediaKeys;
+#ifdef __cplusplus
+interface IMFMediaKeys;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IMFMediaEngineClassFactoryEx_FWD_DEFINED__
+#define __IMFMediaEngineClassFactoryEx_FWD_DEFINED__
+typedef interface IMFMediaEngineClassFactoryEx IMFMediaEngineClassFactoryEx;
+#ifdef __cplusplus
+interface IMFMediaEngineClassFactoryEx;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IMFMediaEngineClassFactory2_FWD_DEFINED__
+#define __IMFMediaEngineClassFactory2_FWD_DEFINED__
+typedef interface IMFMediaEngineClassFactory2 IMFMediaEngineClassFactory2;
+#ifdef __cplusplus
+interface IMFMediaEngineClassFactory2;
+#endif /* __cplusplus */
+#endif
+
 /* Headers for imported files */
 
 #include <mfidl.h>
@@ -2062,6 +2150,692 @@
 #endif  /* __IMFMediaEngineClassFactory_INTERFACE_DEFINED__ */
 
 /*****************************************************************************
+ * IMFMediaSourceExtensionNotify interface
+ */
+#ifndef __IMFMediaSourceExtensionNotify_INTERFACE_DEFINED__
+#define __IMFMediaSourceExtensionNotify_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFMediaSourceExtensionNotify, 0xa7901327, 0x05dd, 0x4469, 0xa7,0xb7, 0x0e,0x01,0x97,0x9e,0x36,0x1d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("a7901327-05dd-4469-a7b7-0e01979e361d")
+IMFMediaSourceExtensionNotify : public IUnknown
+{
+    virtual void STDMETHODCALLTYPE OnSourceOpen(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE OnSourceEnded(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE OnSourceClose(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFMediaSourceExtensionNotify, 0xa7901327, 0x05dd, 0x4469, 0xa7,0xb7, 0x0e,0x01,0x97,0x9e,0x36,0x1d)
+#endif
+#else
+typedef struct IMFMediaSourceExtensionNotifyVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFMediaSourceExtensionNotify *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFMediaSourceExtensionNotify *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFMediaSourceExtensionNotify *This);
+
+    /*** IMFMediaSourceExtensionNotify methods ***/
+    void (STDMETHODCALLTYPE *OnSourceOpen)(
+        IMFMediaSourceExtensionNotify *This);
+
+    void (STDMETHODCALLTYPE *OnSourceEnded)(
+        IMFMediaSourceExtensionNotify *This);
+
+    void (STDMETHODCALLTYPE *OnSourceClose)(
+        IMFMediaSourceExtensionNotify *This);
+
+    END_INTERFACE
+} IMFMediaSourceExtensionNotifyVtbl;
+
+interface IMFMediaSourceExtensionNotify {
+    CONST_VTBL IMFMediaSourceExtensionNotifyVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFMediaSourceExtensionNotify_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFMediaSourceExtensionNotify_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFMediaSourceExtensionNotify_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFMediaSourceExtensionNotify methods ***/
+#define IMFMediaSourceExtensionNotify_OnSourceOpen(This) (This)->lpVtbl->OnSourceOpen(This)
+#define IMFMediaSourceExtensionNotify_OnSourceEnded(This) (This)->lpVtbl->OnSourceEnded(This)
+#define IMFMediaSourceExtensionNotify_OnSourceClose(This) (This)->lpVtbl->OnSourceClose(This)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT IMFMediaSourceExtensionNotify_QueryInterface(IMFMediaSourceExtensionNotify* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG IMFMediaSourceExtensionNotify_AddRef(IMFMediaSourceExtensionNotify* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG IMFMediaSourceExtensionNotify_Release(IMFMediaSourceExtensionNotify* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFMediaSourceExtensionNotify methods ***/
+static inline void IMFMediaSourceExtensionNotify_OnSourceOpen(IMFMediaSourceExtensionNotify* This) {
+    This->lpVtbl->OnSourceOpen(This);
+}
+static inline void IMFMediaSourceExtensionNotify_OnSourceEnded(IMFMediaSourceExtensionNotify* This) {
+    This->lpVtbl->OnSourceEnded(This);
+}
+static inline void IMFMediaSourceExtensionNotify_OnSourceClose(IMFMediaSourceExtensionNotify* This) {
+    This->lpVtbl->OnSourceClose(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IMFMediaSourceExtensionNotify_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMFSourceBufferNotify interface
+ */
+#ifndef __IMFSourceBufferNotify_INTERFACE_DEFINED__
+#define __IMFSourceBufferNotify_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFSourceBufferNotify, 0x87e47623, 0x2ceb, 0x45d6, 0x9b,0x88, 0xd8,0x52,0x0c,0x4d,0xcb,0xbc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("87e47623-2ceb-45d6-9b88-d8520c4dcbbc")
+IMFSourceBufferNotify : public IUnknown
+{
+    virtual void STDMETHODCALLTYPE OnUpdateStart(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE OnAbort(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE OnError(
+        HRESULT hr) = 0;
+
+    virtual void STDMETHODCALLTYPE OnUpdate(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE OnUpdateEnd(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFSourceBufferNotify, 0x87e47623, 0x2ceb, 0x45d6, 0x9b,0x88, 0xd8,0x52,0x0c,0x4d,0xcb,0xbc)
+#endif
+#else
+typedef struct IMFSourceBufferNotifyVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFSourceBufferNotify *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFSourceBufferNotify *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFSourceBufferNotify *This);
+
+    /*** IMFSourceBufferNotify methods ***/
+    void (STDMETHODCALLTYPE *OnUpdateStart)(
+        IMFSourceBufferNotify *This);
+
+    void (STDMETHODCALLTYPE *OnAbort)(
+        IMFSourceBufferNotify *This);
+
+    void (STDMETHODCALLTYPE *OnError)(
+        IMFSourceBufferNotify *This,
+        HRESULT hr);
+
+    void (STDMETHODCALLTYPE *OnUpdate)(
+        IMFSourceBufferNotify *This);
+
+    void (STDMETHODCALLTYPE *OnUpdateEnd)(
+        IMFSourceBufferNotify *This);
+
+    END_INTERFACE
+} IMFSourceBufferNotifyVtbl;
+
+interface IMFSourceBufferNotify {
+    CONST_VTBL IMFSourceBufferNotifyVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFSourceBufferNotify_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFSourceBufferNotify_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFSourceBufferNotify_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFSourceBufferNotify methods ***/
+#define IMFSourceBufferNotify_OnUpdateStart(This) (This)->lpVtbl->OnUpdateStart(This)
+#define IMFSourceBufferNotify_OnAbort(This) (This)->lpVtbl->OnAbort(This)
+#define IMFSourceBufferNotify_OnError(This,hr) (This)->lpVtbl->OnError(This,hr)
+#define IMFSourceBufferNotify_OnUpdate(This) (This)->lpVtbl->OnUpdate(This)
+#define IMFSourceBufferNotify_OnUpdateEnd(This) (This)->lpVtbl->OnUpdateEnd(This)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT IMFSourceBufferNotify_QueryInterface(IMFSourceBufferNotify* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG IMFSourceBufferNotify_AddRef(IMFSourceBufferNotify* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG IMFSourceBufferNotify_Release(IMFSourceBufferNotify* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFSourceBufferNotify methods ***/
+static inline void IMFSourceBufferNotify_OnUpdateStart(IMFSourceBufferNotify* This) {
+    This->lpVtbl->OnUpdateStart(This);
+}
+static inline void IMFSourceBufferNotify_OnAbort(IMFSourceBufferNotify* This) {
+    This->lpVtbl->OnAbort(This);
+}
+static inline void IMFSourceBufferNotify_OnError(IMFSourceBufferNotify* This,HRESULT hr) {
+    This->lpVtbl->OnError(This,hr);
+}
+static inline void IMFSourceBufferNotify_OnUpdate(IMFSourceBufferNotify* This) {
+    This->lpVtbl->OnUpdate(This);
+}
+static inline void IMFSourceBufferNotify_OnUpdateEnd(IMFSourceBufferNotify* This) {
+    This->lpVtbl->OnUpdateEnd(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IMFSourceBufferNotify_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMFSourceBuffer interface
+ */
+#ifndef __IMFSourceBuffer_INTERFACE_DEFINED__
+#define __IMFSourceBuffer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFSourceBuffer, 0xe2cd3a4b, 0xaf25, 0x4d3d, 0x91,0x10, 0xda,0x0e,0x6f,0x8e,0xe8,0x77);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("e2cd3a4b-af25-4d3d-9110-da0e6f8ee877")
+IMFSourceBuffer : public IUnknown
+{
+    virtual WINBOOL STDMETHODCALLTYPE GetUpdating(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBuffered(
+        IMFMediaTimeRange **buffered) = 0;
+
+    virtual double STDMETHODCALLTYPE GetTimeStampOffset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTimeStampOffset(
+        double offset) = 0;
+
+    virtual double STDMETHODCALLTYPE GetAppendWindowStart(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetAppendWindowStart(
+        double time) = 0;
+
+    virtual double STDMETHODCALLTYPE GetAppendWindowEnd(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetAppendWindowEnd(
+        double time) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Append(
+        const BYTE *data,
+        DWORD len) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AppendByteStream(
+        IMFByteStream *stream,
+        DWORDLONG *max_len) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Abort(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Remove(
+        double start,
+        double end) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFSourceBuffer, 0xe2cd3a4b, 0xaf25, 0x4d3d, 0x91,0x10, 0xda,0x0e,0x6f,0x8e,0xe8,0x77)
+#endif
+#else
+typedef struct IMFSourceBufferVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFSourceBuffer *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFSourceBuffer *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFSourceBuffer *This);
+
+    /*** IMFSourceBuffer methods ***/
+    WINBOOL (STDMETHODCALLTYPE *GetUpdating)(
+        IMFSourceBuffer *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetBuffered)(
+        IMFSourceBuffer *This,
+        IMFMediaTimeRange **buffered);
+
+    double (STDMETHODCALLTYPE *GetTimeStampOffset)(
+        IMFSourceBuffer *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetTimeStampOffset)(
+        IMFSourceBuffer *This,
+        double offset);
+
+    double (STDMETHODCALLTYPE *GetAppendWindowStart)(
+        IMFSourceBuffer *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetAppendWindowStart)(
+        IMFSourceBuffer *This,
+        double time);
+
+    double (STDMETHODCALLTYPE *GetAppendWindowEnd)(
+        IMFSourceBuffer *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetAppendWindowEnd)(
+        IMFSourceBuffer *This,
+        double time);
+
+    HRESULT (STDMETHODCALLTYPE *Append)(
+        IMFSourceBuffer *This,
+        const BYTE *data,
+        DWORD len);
+
+    HRESULT (STDMETHODCALLTYPE *AppendByteStream)(
+        IMFSourceBuffer *This,
+        IMFByteStream *stream,
+        DWORDLONG *max_len);
+
+    HRESULT (STDMETHODCALLTYPE *Abort)(
+        IMFSourceBuffer *This);
+
+    HRESULT (STDMETHODCALLTYPE *Remove)(
+        IMFSourceBuffer *This,
+        double start,
+        double end);
+
+    END_INTERFACE
+} IMFSourceBufferVtbl;
+
+interface IMFSourceBuffer {
+    CONST_VTBL IMFSourceBufferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFSourceBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFSourceBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFSourceBuffer_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFSourceBuffer methods ***/
+#define IMFSourceBuffer_GetUpdating(This) (This)->lpVtbl->GetUpdating(This)
+#define IMFSourceBuffer_GetBuffered(This,buffered) (This)->lpVtbl->GetBuffered(This,buffered)
+#define IMFSourceBuffer_GetTimeStampOffset(This) (This)->lpVtbl->GetTimeStampOffset(This)
+#define IMFSourceBuffer_SetTimeStampOffset(This,offset) (This)->lpVtbl->SetTimeStampOffset(This,offset)
+#define IMFSourceBuffer_GetAppendWindowStart(This) (This)->lpVtbl->GetAppendWindowStart(This)
+#define IMFSourceBuffer_SetAppendWindowStart(This,time) (This)->lpVtbl->SetAppendWindowStart(This,time)
+#define IMFSourceBuffer_GetAppendWindowEnd(This) (This)->lpVtbl->GetAppendWindowEnd(This)
+#define IMFSourceBuffer_SetAppendWindowEnd(This,time) (This)->lpVtbl->SetAppendWindowEnd(This,time)
+#define IMFSourceBuffer_Append(This,data,len) (This)->lpVtbl->Append(This,data,len)
+#define IMFSourceBuffer_AppendByteStream(This,stream,max_len) (This)->lpVtbl->AppendByteStream(This,stream,max_len)
+#define IMFSourceBuffer_Abort(This) (This)->lpVtbl->Abort(This)
+#define IMFSourceBuffer_Remove(This,start,end) (This)->lpVtbl->Remove(This,start,end)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT IMFSourceBuffer_QueryInterface(IMFSourceBuffer* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG IMFSourceBuffer_AddRef(IMFSourceBuffer* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG IMFSourceBuffer_Release(IMFSourceBuffer* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFSourceBuffer methods ***/
+static inline WINBOOL IMFSourceBuffer_GetUpdating(IMFSourceBuffer* This) {
+    return This->lpVtbl->GetUpdating(This);
+}
+static inline HRESULT IMFSourceBuffer_GetBuffered(IMFSourceBuffer* This,IMFMediaTimeRange **buffered) {
+    return This->lpVtbl->GetBuffered(This,buffered);
+}
+static inline double IMFSourceBuffer_GetTimeStampOffset(IMFSourceBuffer* This) {
+    return This->lpVtbl->GetTimeStampOffset(This);
+}
+static inline HRESULT IMFSourceBuffer_SetTimeStampOffset(IMFSourceBuffer* This,double offset) {
+    return This->lpVtbl->SetTimeStampOffset(This,offset);
+}
+static inline double IMFSourceBuffer_GetAppendWindowStart(IMFSourceBuffer* This) {
+    return This->lpVtbl->GetAppendWindowStart(This);
+}
+static inline HRESULT IMFSourceBuffer_SetAppendWindowStart(IMFSourceBuffer* This,double time) {
+    return This->lpVtbl->SetAppendWindowStart(This,time);
+}
+static inline double IMFSourceBuffer_GetAppendWindowEnd(IMFSourceBuffer* This) {
+    return This->lpVtbl->GetAppendWindowEnd(This);
+}
+static inline HRESULT IMFSourceBuffer_SetAppendWindowEnd(IMFSourceBuffer* This,double time) {
+    return This->lpVtbl->SetAppendWindowEnd(This,time);
+}
+static inline HRESULT IMFSourceBuffer_Append(IMFSourceBuffer* This,const BYTE *data,DWORD len) {
+    return This->lpVtbl->Append(This,data,len);
+}
+static inline HRESULT IMFSourceBuffer_AppendByteStream(IMFSourceBuffer* This,IMFByteStream *stream,DWORDLONG *max_len) {
+    return This->lpVtbl->AppendByteStream(This,stream,max_len);
+}
+static inline HRESULT IMFSourceBuffer_Abort(IMFSourceBuffer* This) {
+    return This->lpVtbl->Abort(This);
+}
+static inline HRESULT IMFSourceBuffer_Remove(IMFSourceBuffer* This,double start,double end) {
+    return This->lpVtbl->Remove(This,start,end);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IMFSourceBuffer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMFSourceBufferList interface
+ */
+#ifndef __IMFSourceBufferList_INTERFACE_DEFINED__
+#define __IMFSourceBufferList_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFSourceBufferList, 0x249981f8, 0x8325, 0x41f3, 0xb8,0x0c, 0x3b,0x9e,0x3a,0xad,0x0c,0xbe);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("249981f8-8325-41f3-b80c-3b9e3aad0cbe")
+IMFSourceBufferList : public IUnknown
+{
+    virtual DWORD STDMETHODCALLTYPE GetLength(
+        ) = 0;
+
+    virtual IMFSourceBuffer * STDMETHODCALLTYPE GetSourceBuffer(
+        DWORD index) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFSourceBufferList, 0x249981f8, 0x8325, 0x41f3, 0xb8,0x0c, 0x3b,0x9e,0x3a,0xad,0x0c,0xbe)
+#endif
+#else
+typedef struct IMFSourceBufferListVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFSourceBufferList *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFSourceBufferList *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFSourceBufferList *This);
+
+    /*** IMFSourceBufferList methods ***/
+    DWORD (STDMETHODCALLTYPE *GetLength)(
+        IMFSourceBufferList *This);
+
+    IMFSourceBuffer * (STDMETHODCALLTYPE *GetSourceBuffer)(
+        IMFSourceBufferList *This,
+        DWORD index);
+
+    END_INTERFACE
+} IMFSourceBufferListVtbl;
+
+interface IMFSourceBufferList {
+    CONST_VTBL IMFSourceBufferListVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFSourceBufferList_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFSourceBufferList_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFSourceBufferList_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFSourceBufferList methods ***/
+#define IMFSourceBufferList_GetLength(This) (This)->lpVtbl->GetLength(This)
+#define IMFSourceBufferList_GetSourceBuffer(This,index) (This)->lpVtbl->GetSourceBuffer(This,index)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT IMFSourceBufferList_QueryInterface(IMFSourceBufferList* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG IMFSourceBufferList_AddRef(IMFSourceBufferList* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG IMFSourceBufferList_Release(IMFSourceBufferList* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFSourceBufferList methods ***/
+static inline DWORD IMFSourceBufferList_GetLength(IMFSourceBufferList* This) {
+    return This->lpVtbl->GetLength(This);
+}
+static inline IMFSourceBuffer * IMFSourceBufferList_GetSourceBuffer(IMFSourceBufferList* This,DWORD index) {
+    return This->lpVtbl->GetSourceBuffer(This,index);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IMFSourceBufferList_INTERFACE_DEFINED__ */
+
+typedef enum MF_MSE_READY {
+    MF_MSE_READY_CLOSED = 1,
+    MF_MSE_READY_OPEN = 2,
+    MF_MSE_READY_ENDED = 3
+} MF_MSE_READY;
+typedef enum MF_MSE_ERROR {
+    MF_MSE_ERROR_NOERROR = 0,
+    MF_MSE_ERROR_NETWORK = 1,
+    MF_MSE_ERROR_DECODE = 2,
+    MF_MSE_ERROR_UNKNOWN_ERROR = 3
+} MF_MSE_ERROR;
+/*****************************************************************************
+ * IMFMediaSourceExtension interface
+ */
+#ifndef __IMFMediaSourceExtension_INTERFACE_DEFINED__
+#define __IMFMediaSourceExtension_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFMediaSourceExtension, 0xe467b94e, 0xa713, 0x4562, 0xa8,0x02, 0x81,0x6a,0x42,0xe9,0x00,0x8a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("e467b94e-a713-4562-a802-816a42e9008a")
+IMFMediaSourceExtension : public IUnknown
+{
+    virtual IMFSourceBufferList * STDMETHODCALLTYPE GetSourceBuffers(
+        ) = 0;
+
+    virtual IMFSourceBufferList * STDMETHODCALLTYPE GetActiveSourceBuffers(
+        ) = 0;
+
+    virtual MF_MSE_READY STDMETHODCALLTYPE GetReadyState(
+        ) = 0;
+
+    virtual double STDMETHODCALLTYPE GetDuration(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDuration(
+        double duration) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddSourceBuffer(
+        BSTR type,
+        IMFSourceBufferNotify *notify,
+        IMFSourceBuffer **source_buffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveSourceBuffer(
+        IMFSourceBuffer *source_buffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetEndOfStream(
+        MF_MSE_ERROR error) = 0;
+
+    virtual WINBOOL STDMETHODCALLTYPE IsTypeSupported(
+        BSTR type) = 0;
+
+    virtual IMFSourceBuffer * STDMETHODCALLTYPE GetSourceBuffer(
+        DWORD stream_index) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFMediaSourceExtension, 0xe467b94e, 0xa713, 0x4562, 0xa8,0x02, 0x81,0x6a,0x42,0xe9,0x00,0x8a)
+#endif
+#else
+typedef struct IMFMediaSourceExtensionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFMediaSourceExtension *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFMediaSourceExtension *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFMediaSourceExtension *This);
+
+    /*** IMFMediaSourceExtension methods ***/
+    IMFSourceBufferList * (STDMETHODCALLTYPE *GetSourceBuffers)(
+        IMFMediaSourceExtension *This);
+
+    IMFSourceBufferList * (STDMETHODCALLTYPE *GetActiveSourceBuffers)(
+        IMFMediaSourceExtension *This);
+
+    MF_MSE_READY (STDMETHODCALLTYPE *GetReadyState)(
+        IMFMediaSourceExtension *This);
+
+    double (STDMETHODCALLTYPE *GetDuration)(
+        IMFMediaSourceExtension *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetDuration)(
+        IMFMediaSourceExtension *This,
+        double duration);
+
+    HRESULT (STDMETHODCALLTYPE *AddSourceBuffer)(
+        IMFMediaSourceExtension *This,
+        BSTR type,
+        IMFSourceBufferNotify *notify,
+        IMFSourceBuffer **source_buffer);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveSourceBuffer)(
+        IMFMediaSourceExtension *This,
+        IMFSourceBuffer *source_buffer);
+
+    HRESULT (STDMETHODCALLTYPE *SetEndOfStream)(
+        IMFMediaSourceExtension *This,
+        MF_MSE_ERROR error);
+
+    WINBOOL (STDMETHODCALLTYPE *IsTypeSupported)(
+        IMFMediaSourceExtension *This,
+        BSTR type);
+
+    IMFSourceBuffer * (STDMETHODCALLTYPE *GetSourceBuffer)(
+        IMFMediaSourceExtension *This,
+        DWORD stream_index);
+
+    END_INTERFACE
+} IMFMediaSourceExtensionVtbl;
+
+interface IMFMediaSourceExtension {
+    CONST_VTBL IMFMediaSourceExtensionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFMediaSourceExtension_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFMediaSourceExtension_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFMediaSourceExtension_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFMediaSourceExtension methods ***/
+#define IMFMediaSourceExtension_GetSourceBuffers(This) (This)->lpVtbl->GetSourceBuffers(This)
+#define IMFMediaSourceExtension_GetActiveSourceBuffers(This) (This)->lpVtbl->GetActiveSourceBuffers(This)
+#define IMFMediaSourceExtension_GetReadyState(This) (This)->lpVtbl->GetReadyState(This)
+#define IMFMediaSourceExtension_GetDuration(This) (This)->lpVtbl->GetDuration(This)
+#define IMFMediaSourceExtension_SetDuration(This,duration) (This)->lpVtbl->SetDuration(This,duration)
+#define IMFMediaSourceExtension_AddSourceBuffer(This,type,notify,source_buffer) (This)->lpVtbl->AddSourceBuffer(This,type,notify,source_buffer)
+#define IMFMediaSourceExtension_RemoveSourceBuffer(This,source_buffer) (This)->lpVtbl->RemoveSourceBuffer(This,source_buffer)
+#define IMFMediaSourceExtension_SetEndOfStream(This,error) (This)->lpVtbl->SetEndOfStream(This,error)
+#define IMFMediaSourceExtension_IsTypeSupported(This,type) (This)->lpVtbl->IsTypeSupported(This,type)
+#define IMFMediaSourceExtension_GetSourceBuffer(This,stream_index) (This)->lpVtbl->GetSourceBuffer(This,stream_index)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT IMFMediaSourceExtension_QueryInterface(IMFMediaSourceExtension* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG IMFMediaSourceExtension_AddRef(IMFMediaSourceExtension* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG IMFMediaSourceExtension_Release(IMFMediaSourceExtension* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFMediaSourceExtension methods ***/
+static inline IMFSourceBufferList * IMFMediaSourceExtension_GetSourceBuffers(IMFMediaSourceExtension* This) {
+    return This->lpVtbl->GetSourceBuffers(This);
+}
+static inline IMFSourceBufferList * IMFMediaSourceExtension_GetActiveSourceBuffers(IMFMediaSourceExtension* This) {
+    return This->lpVtbl->GetActiveSourceBuffers(This);
+}
+static inline MF_MSE_READY IMFMediaSourceExtension_GetReadyState(IMFMediaSourceExtension* This) {
+    return This->lpVtbl->GetReadyState(This);
+}
+static inline double IMFMediaSourceExtension_GetDuration(IMFMediaSourceExtension* This) {
+    return This->lpVtbl->GetDuration(This);
+}
+static inline HRESULT IMFMediaSourceExtension_SetDuration(IMFMediaSourceExtension* This,double duration) {
+    return This->lpVtbl->SetDuration(This,duration);
+}
+static inline HRESULT IMFMediaSourceExtension_AddSourceBuffer(IMFMediaSourceExtension* This,BSTR type,IMFSourceBufferNotify *notify,IMFSourceBuffer **source_buffer) {
+    return This->lpVtbl->AddSourceBuffer(This,type,notify,source_buffer);
+}
+static inline HRESULT IMFMediaSourceExtension_RemoveSourceBuffer(IMFMediaSourceExtension* This,IMFSourceBuffer *source_buffer) {
+    return This->lpVtbl->RemoveSourceBuffer(This,source_buffer);
+}
+static inline HRESULT IMFMediaSourceExtension_SetEndOfStream(IMFMediaSourceExtension* This,MF_MSE_ERROR error) {
+    return This->lpVtbl->SetEndOfStream(This,error);
+}
+static inline WINBOOL IMFMediaSourceExtension_IsTypeSupported(IMFMediaSourceExtension* This,BSTR type) {
+    return This->lpVtbl->IsTypeSupported(This,type);
+}
+static inline IMFSourceBuffer * IMFMediaSourceExtension_GetSourceBuffer(IMFMediaSourceExtension* This,DWORD stream_index) {
+    return This->lpVtbl->GetSourceBuffer(This,stream_index);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IMFMediaSourceExtension_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
  * IMFMediaEngineNotify interface
  */
 #ifndef __IMFMediaEngineNotify_INTERFACE_DEFINED__
@@ -2356,6 +3130,664 @@
 
 #endif  /* __IMFMediaEngineExtension_INTERFACE_DEFINED__ */
 
+/*****************************************************************************
+ * IMFMediaKeySessionNotify interface
+ */
+#ifndef __IMFMediaKeySessionNotify_INTERFACE_DEFINED__
+#define __IMFMediaKeySessionNotify_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFMediaKeySessionNotify, 0x6a0083f9, 0x8947, 0x4c1d, 0x9c,0xe0, 0xcd,0xee,0x22,0xb2,0x31,0x35);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("6a0083f9-8947-4c1d-9ce0-cdee22b23135")
+IMFMediaKeySessionNotify : public IUnknown
+{
+    virtual void STDMETHODCALLTYPE KeyMessage(
+        BSTR destination_url,
+        const BYTE *message,
+        DWORD message_len) = 0;
+
+    virtual void STDMETHODCALLTYPE KeyAdded(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE KeyError(
+        USHORT code,
+        DWORD system_code) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFMediaKeySessionNotify, 0x6a0083f9, 0x8947, 0x4c1d, 0x9c,0xe0, 0xcd,0xee,0x22,0xb2,0x31,0x35)
+#endif
+#else
+typedef struct IMFMediaKeySessionNotifyVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFMediaKeySessionNotify *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFMediaKeySessionNotify *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFMediaKeySessionNotify *This);
+
+    /*** IMFMediaKeySessionNotify methods ***/
+    void (STDMETHODCALLTYPE *KeyMessage)(
+        IMFMediaKeySessionNotify *This,
+        BSTR destination_url,
+        const BYTE *message,
+        DWORD message_len);
+
+    void (STDMETHODCALLTYPE *KeyAdded)(
+        IMFMediaKeySessionNotify *This);
+
+    void (STDMETHODCALLTYPE *KeyError)(
+        IMFMediaKeySessionNotify *This,
+        USHORT code,
+        DWORD system_code);
+
+    END_INTERFACE
+} IMFMediaKeySessionNotifyVtbl;
+
+interface IMFMediaKeySessionNotify {
+    CONST_VTBL IMFMediaKeySessionNotifyVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFMediaKeySessionNotify_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFMediaKeySessionNotify_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFMediaKeySessionNotify_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFMediaKeySessionNotify methods ***/
+#define IMFMediaKeySessionNotify_KeyMessage(This,destination_url,message,message_len) (This)->lpVtbl->KeyMessage(This,destination_url,message,message_len)
+#define IMFMediaKeySessionNotify_KeyAdded(This) (This)->lpVtbl->KeyAdded(This)
+#define IMFMediaKeySessionNotify_KeyError(This,code,system_code) (This)->lpVtbl->KeyError(This,code,system_code)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT IMFMediaKeySessionNotify_QueryInterface(IMFMediaKeySessionNotify* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG IMFMediaKeySessionNotify_AddRef(IMFMediaKeySessionNotify* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG IMFMediaKeySessionNotify_Release(IMFMediaKeySessionNotify* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFMediaKeySessionNotify methods ***/
+static inline void IMFMediaKeySessionNotify_KeyMessage(IMFMediaKeySessionNotify* This,BSTR destination_url,const BYTE *message,DWORD message_len) {
+    This->lpVtbl->KeyMessage(This,destination_url,message,message_len);
+}
+static inline void IMFMediaKeySessionNotify_KeyAdded(IMFMediaKeySessionNotify* This) {
+    This->lpVtbl->KeyAdded(This);
+}
+static inline void IMFMediaKeySessionNotify_KeyError(IMFMediaKeySessionNotify* This,USHORT code,DWORD system_code) {
+    This->lpVtbl->KeyError(This,code,system_code);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IMFMediaKeySessionNotify_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMFMediaKeySession interface
+ */
+#ifndef __IMFMediaKeySession_INTERFACE_DEFINED__
+#define __IMFMediaKeySession_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFMediaKeySession, 0x24fa67d5, 0xd1d0, 0x4dc5, 0x99,0x5c, 0xc0,0xef,0xdc,0x19,0x1f,0xb5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("24fa67d5-d1d0-4dc5-995c-c0efdc191fb5")
+IMFMediaKeySession : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetError(
+        USHORT *code,
+        DWORD *system_code) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_KeySystem(
+        BSTR *key_system) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_SessionId(
+        BSTR *session_id) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Update(
+        const BYTE *key,
+        DWORD key_len) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Close(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFMediaKeySession, 0x24fa67d5, 0xd1d0, 0x4dc5, 0x99,0x5c, 0xc0,0xef,0xdc,0x19,0x1f,0xb5)
+#endif
+#else
+typedef struct IMFMediaKeySessionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFMediaKeySession *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFMediaKeySession *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFMediaKeySession *This);
+
+    /*** IMFMediaKeySession methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetError)(
+        IMFMediaKeySession *This,
+        USHORT *code,
+        DWORD *system_code);
+
+    HRESULT (STDMETHODCALLTYPE *get_KeySystem)(
+        IMFMediaKeySession *This,
+        BSTR *key_system);
+
+    HRESULT (STDMETHODCALLTYPE *get_SessionId)(
+        IMFMediaKeySession *This,
+        BSTR *session_id);
+
+    HRESULT (STDMETHODCALLTYPE *Update)(
+        IMFMediaKeySession *This,
+        const BYTE *key,
+        DWORD key_len);
+
+    HRESULT (STDMETHODCALLTYPE *Close)(
+        IMFMediaKeySession *This);
+
+    END_INTERFACE
+} IMFMediaKeySessionVtbl;
+
+interface IMFMediaKeySession {
+    CONST_VTBL IMFMediaKeySessionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFMediaKeySession_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFMediaKeySession_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFMediaKeySession_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFMediaKeySession methods ***/
+#define IMFMediaKeySession_GetError(This,code,system_code) (This)->lpVtbl->GetError(This,code,system_code)
+#define IMFMediaKeySession_get_KeySystem(This,key_system) (This)->lpVtbl->get_KeySystem(This,key_system)
+#define IMFMediaKeySession_get_SessionId(This,session_id) (This)->lpVtbl->get_SessionId(This,session_id)
+#define IMFMediaKeySession_Update(This,key,key_len) (This)->lpVtbl->Update(This,key,key_len)
+#define IMFMediaKeySession_Close(This) (This)->lpVtbl->Close(This)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT IMFMediaKeySession_QueryInterface(IMFMediaKeySession* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG IMFMediaKeySession_AddRef(IMFMediaKeySession* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG IMFMediaKeySession_Release(IMFMediaKeySession* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFMediaKeySession methods ***/
+static inline HRESULT IMFMediaKeySession_GetError(IMFMediaKeySession* This,USHORT *code,DWORD *system_code) {
+    return This->lpVtbl->GetError(This,code,system_code);
+}
+static inline HRESULT IMFMediaKeySession_get_KeySystem(IMFMediaKeySession* This,BSTR *key_system) {
+    return This->lpVtbl->get_KeySystem(This,key_system);
+}
+static inline HRESULT IMFMediaKeySession_get_SessionId(IMFMediaKeySession* This,BSTR *session_id) {
+    return This->lpVtbl->get_SessionId(This,session_id);
+}
+static inline HRESULT IMFMediaKeySession_Update(IMFMediaKeySession* This,const BYTE *key,DWORD key_len) {
+    return This->lpVtbl->Update(This,key,key_len);
+}
+static inline HRESULT IMFMediaKeySession_Close(IMFMediaKeySession* This) {
+    return This->lpVtbl->Close(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IMFMediaKeySession_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMFCdmSuspendNotify interface
+ */
+#ifndef __IMFCdmSuspendNotify_INTERFACE_DEFINED__
+#define __IMFCdmSuspendNotify_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFCdmSuspendNotify, 0x7a5645d2, 0x43bd, 0x47fd, 0x87,0xb7, 0xdc,0xd2,0x4c,0xc7,0xd6,0x92);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("7a5645d2-43bd-47fd-87b7-dcd24cc7d692")
+IMFCdmSuspendNotify : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Begin(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE End(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFCdmSuspendNotify, 0x7a5645d2, 0x43bd, 0x47fd, 0x87,0xb7, 0xdc,0xd2,0x4c,0xc7,0xd6,0x92)
+#endif
+#else
+typedef struct IMFCdmSuspendNotifyVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFCdmSuspendNotify *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFCdmSuspendNotify *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFCdmSuspendNotify *This);
+
+    /*** IMFCdmSuspendNotify methods ***/
+    HRESULT (STDMETHODCALLTYPE *Begin)(
+        IMFCdmSuspendNotify *This);
+
+    HRESULT (STDMETHODCALLTYPE *End)(
+        IMFCdmSuspendNotify *This);
+
+    END_INTERFACE
+} IMFCdmSuspendNotifyVtbl;
+
+interface IMFCdmSuspendNotify {
+    CONST_VTBL IMFCdmSuspendNotifyVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFCdmSuspendNotify_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFCdmSuspendNotify_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFCdmSuspendNotify_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFCdmSuspendNotify methods ***/
+#define IMFCdmSuspendNotify_Begin(This) (This)->lpVtbl->Begin(This)
+#define IMFCdmSuspendNotify_End(This) (This)->lpVtbl->End(This)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT IMFCdmSuspendNotify_QueryInterface(IMFCdmSuspendNotify* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG IMFCdmSuspendNotify_AddRef(IMFCdmSuspendNotify* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG IMFCdmSuspendNotify_Release(IMFCdmSuspendNotify* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFCdmSuspendNotify methods ***/
+static inline HRESULT IMFCdmSuspendNotify_Begin(IMFCdmSuspendNotify* This) {
+    return This->lpVtbl->Begin(This);
+}
+static inline HRESULT IMFCdmSuspendNotify_End(IMFCdmSuspendNotify* This) {
+    return This->lpVtbl->End(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IMFCdmSuspendNotify_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMFMediaKeys interface
+ */
+#ifndef __IMFMediaKeys_INTERFACE_DEFINED__
+#define __IMFMediaKeys_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFMediaKeys, 0x5cb31c05, 0x61ff, 0x418f, 0xaf,0xda, 0xca,0xaf,0x41,0x42,0x1a,0x38);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("5cb31c05-61ff-418f-afda-caaf41421a38")
+IMFMediaKeys : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateSession(
+        BSTR mime_type,
+        const BYTE *init_data,
+        DWORD init_data_len,
+        const BYTE *custom_data,
+        DWORD custom_data_len,
+        IMFMediaKeySessionNotify *notify,
+        IMFMediaKeySession **session) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_KeySystem(
+        BSTR *key_system) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Shutdown(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSuspendNotify(
+        IMFCdmSuspendNotify **notify) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFMediaKeys, 0x5cb31c05, 0x61ff, 0x418f, 0xaf,0xda, 0xca,0xaf,0x41,0x42,0x1a,0x38)
+#endif
+#else
+typedef struct IMFMediaKeysVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFMediaKeys *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFMediaKeys *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFMediaKeys *This);
+
+    /*** IMFMediaKeys methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateSession)(
+        IMFMediaKeys *This,
+        BSTR mime_type,
+        const BYTE *init_data,
+        DWORD init_data_len,
+        const BYTE *custom_data,
+        DWORD custom_data_len,
+        IMFMediaKeySessionNotify *notify,
+        IMFMediaKeySession **session);
+
+    HRESULT (STDMETHODCALLTYPE *get_KeySystem)(
+        IMFMediaKeys *This,
+        BSTR *key_system);
+
+    HRESULT (STDMETHODCALLTYPE *Shutdown)(
+        IMFMediaKeys *This);
+
+    HRESULT (STDMETHODCALLTYPE *GetSuspendNotify)(
+        IMFMediaKeys *This,
+        IMFCdmSuspendNotify **notify);
+
+    END_INTERFACE
+} IMFMediaKeysVtbl;
+
+interface IMFMediaKeys {
+    CONST_VTBL IMFMediaKeysVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFMediaKeys_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFMediaKeys_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFMediaKeys_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFMediaKeys methods ***/
+#define IMFMediaKeys_CreateSession(This,mime_type,init_data,init_data_len,custom_data,custom_data_len,notify,session) (This)->lpVtbl->CreateSession(This,mime_type,init_data,init_data_len,custom_data,custom_data_len,notify,session)
+#define IMFMediaKeys_get_KeySystem(This,key_system) (This)->lpVtbl->get_KeySystem(This,key_system)
+#define IMFMediaKeys_Shutdown(This) (This)->lpVtbl->Shutdown(This)
+#define IMFMediaKeys_GetSuspendNotify(This,notify) (This)->lpVtbl->GetSuspendNotify(This,notify)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT IMFMediaKeys_QueryInterface(IMFMediaKeys* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG IMFMediaKeys_AddRef(IMFMediaKeys* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG IMFMediaKeys_Release(IMFMediaKeys* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFMediaKeys methods ***/
+static inline HRESULT IMFMediaKeys_CreateSession(IMFMediaKeys* This,BSTR mime_type,const BYTE *init_data,DWORD init_data_len,const BYTE *custom_data,DWORD custom_data_len,IMFMediaKeySessionNotify *notify,IMFMediaKeySession **session) {
+    return This->lpVtbl->CreateSession(This,mime_type,init_data,init_data_len,custom_data,custom_data_len,notify,session);
+}
+static inline HRESULT IMFMediaKeys_get_KeySystem(IMFMediaKeys* This,BSTR *key_system) {
+    return This->lpVtbl->get_KeySystem(This,key_system);
+}
+static inline HRESULT IMFMediaKeys_Shutdown(IMFMediaKeys* This) {
+    return This->lpVtbl->Shutdown(This);
+}
+static inline HRESULT IMFMediaKeys_GetSuspendNotify(IMFMediaKeys* This,IMFCdmSuspendNotify **notify) {
+    return This->lpVtbl->GetSuspendNotify(This,notify);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IMFMediaKeys_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMFMediaEngineClassFactoryEx interface
+ */
+#ifndef __IMFMediaEngineClassFactoryEx_INTERFACE_DEFINED__
+#define __IMFMediaEngineClassFactoryEx_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFMediaEngineClassFactoryEx, 0xc56156c6, 0xea5b, 0x48a5, 0x9d,0xf8, 0xfb,0xe0,0x35,0xd0,0x92,0x9e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("c56156c6-ea5b-48a5-9df8-fbe035d0929e")
+IMFMediaEngineClassFactoryEx : public IMFMediaEngineClassFactory
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateMediaSourceExtension(
+        DWORD flags,
+        IMFAttributes *attr,
+        IMFMediaSourceExtension **mse) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateMediaKeys(
+        BSTR key_system,
+        BSTR cdm_store_path,
+        IMFMediaKeys **keys) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsTypeSupported(
+        BSTR type,
+        BSTR key_system,
+        WINBOOL *is_supported) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFMediaEngineClassFactoryEx, 0xc56156c6, 0xea5b, 0x48a5, 0x9d,0xf8, 0xfb,0xe0,0x35,0xd0,0x92,0x9e)
+#endif
+#else
+typedef struct IMFMediaEngineClassFactoryExVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFMediaEngineClassFactoryEx *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFMediaEngineClassFactoryEx *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFMediaEngineClassFactoryEx *This);
+
+    /*** IMFMediaEngineClassFactory methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateInstance)(
+        IMFMediaEngineClassFactoryEx *This,
+        DWORD flags,
+        IMFAttributes *attributes,
+        IMFMediaEngine **engine);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTimeRange)(
+        IMFMediaEngineClassFactoryEx *This,
+        IMFMediaTimeRange **range);
+
+    HRESULT (STDMETHODCALLTYPE *CreateError)(
+        IMFMediaEngineClassFactoryEx *This,
+        IMFMediaError **error);
+
+    /*** IMFMediaEngineClassFactoryEx methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateMediaSourceExtension)(
+        IMFMediaEngineClassFactoryEx *This,
+        DWORD flags,
+        IMFAttributes *attr,
+        IMFMediaSourceExtension **mse);
+
+    HRESULT (STDMETHODCALLTYPE *CreateMediaKeys)(
+        IMFMediaEngineClassFactoryEx *This,
+        BSTR key_system,
+        BSTR cdm_store_path,
+        IMFMediaKeys **keys);
+
+    HRESULT (STDMETHODCALLTYPE *IsTypeSupported)(
+        IMFMediaEngineClassFactoryEx *This,
+        BSTR type,
+        BSTR key_system,
+        WINBOOL *is_supported);
+
+    END_INTERFACE
+} IMFMediaEngineClassFactoryExVtbl;
+
+interface IMFMediaEngineClassFactoryEx {
+    CONST_VTBL IMFMediaEngineClassFactoryExVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFMediaEngineClassFactoryEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFMediaEngineClassFactoryEx_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFMediaEngineClassFactoryEx_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFMediaEngineClassFactory methods ***/
+#define IMFMediaEngineClassFactoryEx_CreateInstance(This,flags,attributes,engine) (This)->lpVtbl->CreateInstance(This,flags,attributes,engine)
+#define IMFMediaEngineClassFactoryEx_CreateTimeRange(This,range) (This)->lpVtbl->CreateTimeRange(This,range)
+#define IMFMediaEngineClassFactoryEx_CreateError(This,error) (This)->lpVtbl->CreateError(This,error)
+/*** IMFMediaEngineClassFactoryEx methods ***/
+#define IMFMediaEngineClassFactoryEx_CreateMediaSourceExtension(This,flags,attr,mse) (This)->lpVtbl->CreateMediaSourceExtension(This,flags,attr,mse)
+#define IMFMediaEngineClassFactoryEx_CreateMediaKeys(This,key_system,cdm_store_path,keys) (This)->lpVtbl->CreateMediaKeys(This,key_system,cdm_store_path,keys)
+#define IMFMediaEngineClassFactoryEx_IsTypeSupported(This,type,key_system,is_supported) (This)->lpVtbl->IsTypeSupported(This,type,key_system,is_supported)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT IMFMediaEngineClassFactoryEx_QueryInterface(IMFMediaEngineClassFactoryEx* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG IMFMediaEngineClassFactoryEx_AddRef(IMFMediaEngineClassFactoryEx* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG IMFMediaEngineClassFactoryEx_Release(IMFMediaEngineClassFactoryEx* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFMediaEngineClassFactory methods ***/
+static inline HRESULT IMFMediaEngineClassFactoryEx_CreateInstance(IMFMediaEngineClassFactoryEx* This,DWORD flags,IMFAttributes *attributes,IMFMediaEngine **engine) {
+    return This->lpVtbl->CreateInstance(This,flags,attributes,engine);
+}
+static inline HRESULT IMFMediaEngineClassFactoryEx_CreateTimeRange(IMFMediaEngineClassFactoryEx* This,IMFMediaTimeRange **range) {
+    return This->lpVtbl->CreateTimeRange(This,range);
+}
+static inline HRESULT IMFMediaEngineClassFactoryEx_CreateError(IMFMediaEngineClassFactoryEx* This,IMFMediaError **error) {
+    return This->lpVtbl->CreateError(This,error);
+}
+/*** IMFMediaEngineClassFactoryEx methods ***/
+static inline HRESULT IMFMediaEngineClassFactoryEx_CreateMediaSourceExtension(IMFMediaEngineClassFactoryEx* This,DWORD flags,IMFAttributes *attr,IMFMediaSourceExtension **mse) {
+    return This->lpVtbl->CreateMediaSourceExtension(This,flags,attr,mse);
+}
+static inline HRESULT IMFMediaEngineClassFactoryEx_CreateMediaKeys(IMFMediaEngineClassFactoryEx* This,BSTR key_system,BSTR cdm_store_path,IMFMediaKeys **keys) {
+    return This->lpVtbl->CreateMediaKeys(This,key_system,cdm_store_path,keys);
+}
+static inline HRESULT IMFMediaEngineClassFactoryEx_IsTypeSupported(IMFMediaEngineClassFactoryEx* This,BSTR type,BSTR key_system,WINBOOL *is_supported) {
+    return This->lpVtbl->IsTypeSupported(This,type,key_system,is_supported);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IMFMediaEngineClassFactoryEx_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMFMediaEngineClassFactory2 interface
+ */
+#ifndef __IMFMediaEngineClassFactory2_INTERFACE_DEFINED__
+#define __IMFMediaEngineClassFactory2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFMediaEngineClassFactory2, 0x09083cef, 0x867f, 0x4bf6, 0x87,0x76, 0xde,0xe3,0xa7,0xb4,0x2f,0xca);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("09083cef-867f-4bf6-8776-dee3a7b42fca")
+IMFMediaEngineClassFactory2 : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateMediaKeys2(
+        BSTR key_system,
+        BSTR default_cdm_store_path,
+        BSTR inprivate_cdm_store_path,
+        IMFMediaKeys **keys) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFMediaEngineClassFactory2, 0x09083cef, 0x867f, 0x4bf6, 0x87,0x76, 0xde,0xe3,0xa7,0xb4,0x2f,0xca)
+#endif
+#else
+typedef struct IMFMediaEngineClassFactory2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFMediaEngineClassFactory2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFMediaEngineClassFactory2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFMediaEngineClassFactory2 *This);
+
+    /*** IMFMediaEngineClassFactory2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateMediaKeys2)(
+        IMFMediaEngineClassFactory2 *This,
+        BSTR key_system,
+        BSTR default_cdm_store_path,
+        BSTR inprivate_cdm_store_path,
+        IMFMediaKeys **keys);
+
+    END_INTERFACE
+} IMFMediaEngineClassFactory2Vtbl;
+
+interface IMFMediaEngineClassFactory2 {
+    CONST_VTBL IMFMediaEngineClassFactory2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFMediaEngineClassFactory2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFMediaEngineClassFactory2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFMediaEngineClassFactory2_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFMediaEngineClassFactory2 methods ***/
+#define IMFMediaEngineClassFactory2_CreateMediaKeys2(This,key_system,default_cdm_store_path,inprivate_cdm_store_path,keys) (This)->lpVtbl->CreateMediaKeys2(This,key_system,default_cdm_store_path,inprivate_cdm_store_path,keys)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT IMFMediaEngineClassFactory2_QueryInterface(IMFMediaEngineClassFactory2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG IMFMediaEngineClassFactory2_AddRef(IMFMediaEngineClassFactory2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG IMFMediaEngineClassFactory2_Release(IMFMediaEngineClassFactory2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFMediaEngineClassFactory2 methods ***/
+static inline HRESULT IMFMediaEngineClassFactory2_CreateMediaKeys2(IMFMediaEngineClassFactory2* This,BSTR key_system,BSTR default_cdm_store_path,BSTR inprivate_cdm_store_path,IMFMediaKeys **keys) {
+    return This->lpVtbl->CreateMediaKeys2(This,key_system,default_cdm_store_path,inprivate_cdm_store_path,keys);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IMFMediaEngineClassFactory2_INTERFACE_DEFINED__ */
+
 /* Begin additional prototypes for all interfaces */
 
 
diff --git a/mingw-w64-headers/include/mfobjects.h b/mingw-w64-headers/include/mfobjects.h
index b5af40f..79613ae 100644
--- a/mingw-w64-headers/include/mfobjects.h
+++ b/mingw-w64-headers/include/mfobjects.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/mfobjects.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/mfobjects.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfplay.h b/mingw-w64-headers/include/mfplay.h
index 534af38..a357bd1 100644
--- a/mingw-w64-headers/include/mfplay.h
+++ b/mingw-w64-headers/include/mfplay.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/mfplay.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/mfplay.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mfreadwrite.h b/mingw-w64-headers/include/mfreadwrite.h
index 762195f..d79b477 100644
--- a/mingw-w64-headers/include/mfreadwrite.h
+++ b/mingw-w64-headers/include/mfreadwrite.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/mfreadwrite.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/mfreadwrite.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mftransform.h b/mingw-w64-headers/include/mftransform.h
index 8568b25..f314e1e 100644
--- a/mingw-w64-headers/include/mftransform.h
+++ b/mingw-w64-headers/include/mftransform.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/mftransform.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/mftransform.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mmdeviceapi.h b/mingw-w64-headers/include/mmdeviceapi.h
index 2c14828..b1ef589 100644
--- a/mingw-w64-headers/include/mmdeviceapi.h
+++ b/mingw-w64-headers/include/mmdeviceapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/mmdeviceapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/mmdeviceapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mmstream.h b/mingw-w64-headers/include/mmstream.h
index 2c71e86..b2aa0f6 100644
--- a/mingw-w64-headers/include/mmstream.h
+++ b/mingw-w64-headers/include/mmstream.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/mmstream.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/mmstream.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mpeg2data.h b/mingw-w64-headers/include/mpeg2data.h
index 9227e71..85435ab 100644
--- a/mingw-w64-headers/include/mpeg2data.h
+++ b/mingw-w64-headers/include/mpeg2data.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/mpeg2data.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/mpeg2data.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mpeg2structs.h b/mingw-w64-headers/include/mpeg2structs.h
index a465ba0..4146ba0 100644
--- a/mingw-w64-headers/include/mpeg2structs.h
+++ b/mingw-w64-headers/include/mpeg2structs.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/mpeg2structs.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/mpeg2structs.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mscoree.h b/mingw-w64-headers/include/mscoree.h
index d0356d9..6128aed 100644
--- a/mingw-w64-headers/include/mscoree.h
+++ b/mingw-w64-headers/include/mscoree.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/mscoree.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/mscoree.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msctf.h b/mingw-w64-headers/include/msctf.h
index 04c2126..29123f6 100644
--- a/mingw-w64-headers/include/msctf.h
+++ b/mingw-w64-headers/include/msctf.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/msctf.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/msctf.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mshtmhst.h b/mingw-w64-headers/include/mshtmhst.h
index 976663c..dd8ac81 100644
--- a/mingw-w64-headers/include/mshtmhst.h
+++ b/mingw-w64-headers/include/mshtmhst.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/mshtmhst.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/mshtmhst.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mshtml.h b/mingw-w64-headers/include/mshtml.h
index d46692a..160043f 100644
--- a/mingw-w64-headers/include/mshtml.h
+++ b/mingw-w64-headers/include/mshtml.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/mshtml.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/mshtml.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msinkaut.h b/mingw-w64-headers/include/msinkaut.h
index 64e7087..e63cbdd 100644
--- a/mingw-w64-headers/include/msinkaut.h
+++ b/mingw-w64-headers/include/msinkaut.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/msinkaut.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/msinkaut.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msinkaut_i.c b/mingw-w64-headers/include/msinkaut_i.c
index 6f16204..26cdfab 100644
--- a/mingw-w64-headers/include/msinkaut_i.c
+++ b/mingw-w64-headers/include/msinkaut_i.c
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from msinkaut.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from msinkaut.idl - Do not edit ***/
 
 #include <rpc.h>
 #include <rpcndr.h>
diff --git a/mingw-w64-headers/include/msopc.h b/mingw-w64-headers/include/msopc.h
index 8d836cb..e962609 100644
--- a/mingw-w64-headers/include/msopc.h
+++ b/mingw-w64-headers/include/msopc.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/msopc.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/msopc.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msxml.h b/mingw-w64-headers/include/msxml.h
index a8a64a4..557b271 100644
--- a/mingw-w64-headers/include/msxml.h
+++ b/mingw-w64-headers/include/msxml.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/msxml.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/msxml.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msxml2.h b/mingw-w64-headers/include/msxml2.h
index 685e2c3..017191b 100644
--- a/mingw-w64-headers/include/msxml2.h
+++ b/mingw-w64-headers/include/msxml2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/msxml2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/msxml2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msxml6.h b/mingw-w64-headers/include/msxml6.h
index 502d856..d91c31d 100644
--- a/mingw-w64-headers/include/msxml6.h
+++ b/mingw-w64-headers/include/msxml6.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/msxml6.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/msxml6.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napcertrelyingparty.h b/mingw-w64-headers/include/napcertrelyingparty.h
index 98ee8e5..fac5903 100644
--- a/mingw-w64-headers/include/napcertrelyingparty.h
+++ b/mingw-w64-headers/include/napcertrelyingparty.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/napcertrelyingparty.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/napcertrelyingparty.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napcommon.h b/mingw-w64-headers/include/napcommon.h
index 8b211c9..3a36264 100644
--- a/mingw-w64-headers/include/napcommon.h
+++ b/mingw-w64-headers/include/napcommon.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/napcommon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/napcommon.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napenforcementclient.h b/mingw-w64-headers/include/napenforcementclient.h
index c7bf663..6e49025 100644
--- a/mingw-w64-headers/include/napenforcementclient.h
+++ b/mingw-w64-headers/include/napenforcementclient.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/napenforcementclient.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/napenforcementclient.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napmanagement.h b/mingw-w64-headers/include/napmanagement.h
index 9f8dfbe..d78ea7a 100644
--- a/mingw-w64-headers/include/napmanagement.h
+++ b/mingw-w64-headers/include/napmanagement.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/napmanagement.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/napmanagement.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napprotocol.h b/mingw-w64-headers/include/napprotocol.h
index 720a8ed..e3abb91 100644
--- a/mingw-w64-headers/include/napprotocol.h
+++ b/mingw-w64-headers/include/napprotocol.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/napprotocol.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/napprotocol.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napservermanagement.h b/mingw-w64-headers/include/napservermanagement.h
index 4ac29e0..d64cba6 100644
--- a/mingw-w64-headers/include/napservermanagement.h
+++ b/mingw-w64-headers/include/napservermanagement.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/napservermanagement.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/napservermanagement.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napsystemhealthagent.h b/mingw-w64-headers/include/napsystemhealthagent.h
index e189161..2a7b9ec 100644
--- a/mingw-w64-headers/include/napsystemhealthagent.h
+++ b/mingw-w64-headers/include/napsystemhealthagent.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/napsystemhealthagent.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/napsystemhealthagent.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/napsystemhealthvalidator.h b/mingw-w64-headers/include/napsystemhealthvalidator.h
index bddcf91..6aa8f90 100644
--- a/mingw-w64-headers/include/napsystemhealthvalidator.h
+++ b/mingw-w64-headers/include/napsystemhealthvalidator.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/napsystemhealthvalidator.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/napsystemhealthvalidator.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/naptypes.h b/mingw-w64-headers/include/naptypes.h
index 88b42af..3768e45 100644
--- a/mingw-w64-headers/include/naptypes.h
+++ b/mingw-w64-headers/include/naptypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/naptypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/naptypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/netcfgn.h b/mingw-w64-headers/include/netcfgn.h
index dd1c6e0..d6b6f5f 100644
--- a/mingw-w64-headers/include/netcfgn.h
+++ b/mingw-w64-headers/include/netcfgn.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/netcfgn.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/netcfgn.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/netcfgx.h b/mingw-w64-headers/include/netcfgx.h
index dbb89d8..155f7fd 100644
--- a/mingw-w64-headers/include/netcfgx.h
+++ b/mingw-w64-headers/include/netcfgx.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/netcfgx.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/netcfgx.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/netfw.h b/mingw-w64-headers/include/netfw.h
index 37147f0..0924674 100644
--- a/mingw-w64-headers/include/netfw.h
+++ b/mingw-w64-headers/include/netfw.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/netfw.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/netfw.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/netlistmgr.h b/mingw-w64-headers/include/netlistmgr.h
index 6771a20..71114a7 100644
--- a/mingw-w64-headers/include/netlistmgr.h
+++ b/mingw-w64-headers/include/netlistmgr.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/netlistmgr.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/netlistmgr.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/oaidl.h b/mingw-w64-headers/include/oaidl.h
index 22d33d3..35fb876 100644
--- a/mingw-w64-headers/include/oaidl.h
+++ b/mingw-w64-headers/include/oaidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/oaidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/oaidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/objectarray.h b/mingw-w64-headers/include/objectarray.h
index cbbfd54..d41c5c0 100644
--- a/mingw-w64-headers/include/objectarray.h
+++ b/mingw-w64-headers/include/objectarray.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/objectarray.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/objectarray.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/objidl.h b/mingw-w64-headers/include/objidl.h
index a0afbe7..da88048 100644
--- a/mingw-w64-headers/include/objidl.h
+++ b/mingw-w64-headers/include/objidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/objidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/objidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/objidlbase.h b/mingw-w64-headers/include/objidlbase.h
index ce815d3..2a70560 100644
--- a/mingw-w64-headers/include/objidlbase.h
+++ b/mingw-w64-headers/include/objidlbase.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/objidlbase.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/objidlbase.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/ocidl.h b/mingw-w64-headers/include/ocidl.h
index b1427af..0169780 100644
--- a/mingw-w64-headers/include/ocidl.h
+++ b/mingw-w64-headers/include/ocidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/ocidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/ocidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/oleacc.h b/mingw-w64-headers/include/oleacc.h
index 05c4308..da720bc 100644
--- a/mingw-w64-headers/include/oleacc.h
+++ b/mingw-w64-headers/include/oleacc.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/oleacc.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/oleacc.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/oleidl.h b/mingw-w64-headers/include/oleidl.h
index 8f800c5..3d472e1 100644
--- a/mingw-w64-headers/include/oleidl.h
+++ b/mingw-w64-headers/include/oleidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/oleidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/oleidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/optary.h b/mingw-w64-headers/include/optary.h
index af9ee03..cb3a0df 100644
--- a/mingw-w64-headers/include/optary.h
+++ b/mingw-w64-headers/include/optary.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/optary.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/optary.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/portabledeviceapi.h b/mingw-w64-headers/include/portabledeviceapi.h
index 4f8aa81..fa7342b 100644
--- a/mingw-w64-headers/include/portabledeviceapi.h
+++ b/mingw-w64-headers/include/portabledeviceapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/portabledeviceapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/portabledeviceapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/portabledevicetypes.h b/mingw-w64-headers/include/portabledevicetypes.h
index 978bfe2..0bb6040 100644
--- a/mingw-w64-headers/include/portabledevicetypes.h
+++ b/mingw-w64-headers/include/portabledevicetypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/portabledevicetypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/portabledevicetypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/proofofpossessioncookieinfo.h b/mingw-w64-headers/include/proofofpossessioncookieinfo.h
index a70e3a7..c3efe64 100644
--- a/mingw-w64-headers/include/proofofpossessioncookieinfo.h
+++ b/mingw-w64-headers/include/proofofpossessioncookieinfo.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/proofofpossessioncookieinfo.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/proofofpossessioncookieinfo.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/propidl.h b/mingw-w64-headers/include/propidl.h
index 6e74ba1..eb2a089 100644
--- a/mingw-w64-headers/include/propidl.h
+++ b/mingw-w64-headers/include/propidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/propidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/propidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/propsys.h b/mingw-w64-headers/include/propsys.h
index efe24ec..db072b9 100644
--- a/mingw-w64-headers/include/propsys.h
+++ b/mingw-w64-headers/include/propsys.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/propsys.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/propsys.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/qedit.h b/mingw-w64-headers/include/qedit.h
index 7f4792e..80879e7 100644
--- a/mingw-w64-headers/include/qedit.h
+++ b/mingw-w64-headers/include/qedit.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/qedit.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/qedit.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/qnetwork.h b/mingw-w64-headers/include/qnetwork.h
index 9d7780c..244e130 100644
--- a/mingw-w64-headers/include/qnetwork.h
+++ b/mingw-w64-headers/include/qnetwork.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/qnetwork.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/qnetwork.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/rdpencomapi.h b/mingw-w64-headers/include/rdpencomapi.h
index d9a49a4..2f68285 100644
--- a/mingw-w64-headers/include/rdpencomapi.h
+++ b/mingw-w64-headers/include/rdpencomapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/rdpencomapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/rdpencomapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/regbag.h b/mingw-w64-headers/include/regbag.h
index 39a12f7..0cc3e6d 100644
--- a/mingw-w64-headers/include/regbag.h
+++ b/mingw-w64-headers/include/regbag.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/regbag.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/regbag.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/relogger.h b/mingw-w64-headers/include/relogger.h
index 7fcd272..04e2c28 100644
--- a/mingw-w64-headers/include/relogger.h
+++ b/mingw-w64-headers/include/relogger.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/relogger.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/relogger.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/robuffer.h b/mingw-w64-headers/include/robuffer.h
index 82bb7d9..bde47a0 100644
--- a/mingw-w64-headers/include/robuffer.h
+++ b/mingw-w64-headers/include/robuffer.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/robuffer.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/robuffer.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/rtworkq.h b/mingw-w64-headers/include/rtworkq.h
index 80fda0e..d370415 100644
--- a/mingw-w64-headers/include/rtworkq.h
+++ b/mingw-w64-headers/include/rtworkq.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/rtworkq.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/rtworkq.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/sapi51.h b/mingw-w64-headers/include/sapi51.h
index 42d89ca..218f273 100644
--- a/mingw-w64-headers/include/sapi51.h
+++ b/mingw-w64-headers/include/sapi51.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/sapi51.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/sapi51.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/sapi53.h b/mingw-w64-headers/include/sapi53.h
index dda6f6c..230d176 100644
--- a/mingw-w64-headers/include/sapi53.h
+++ b/mingw-w64-headers/include/sapi53.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/sapi53.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/sapi53.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/sapi54.h b/mingw-w64-headers/include/sapi54.h
index f3b2868..39b12f4 100644
--- a/mingw-w64-headers/include/sapi54.h
+++ b/mingw-w64-headers/include/sapi54.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/sapi54.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/sapi54.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/sensorsapi.h b/mingw-w64-headers/include/sensorsapi.h
index 93a6c99..9928f89 100644
--- a/mingw-w64-headers/include/sensorsapi.h
+++ b/mingw-w64-headers/include/sensorsapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/sensorsapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/sensorsapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/servprov.h b/mingw-w64-headers/include/servprov.h
index 9257921..d52b686 100644
--- a/mingw-w64-headers/include/servprov.h
+++ b/mingw-w64-headers/include/servprov.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/servprov.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/servprov.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/shldisp.h b/mingw-w64-headers/include/shldisp.h
index 2830430..bdb75b4 100644
--- a/mingw-w64-headers/include/shldisp.h
+++ b/mingw-w64-headers/include/shldisp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/shldisp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/shldisp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/shobjidl.h b/mingw-w64-headers/include/shobjidl.h
index 0cad92a..7233457 100644
--- a/mingw-w64-headers/include/shobjidl.h
+++ b/mingw-w64-headers/include/shobjidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/shobjidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/shobjidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/shtypes.h b/mingw-w64-headers/include/shtypes.h
index a38b17e..cfc34ad 100644
--- a/mingw-w64-headers/include/shtypes.h
+++ b/mingw-w64-headers/include/shtypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/shtypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/shtypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/spatialaudioclient.h b/mingw-w64-headers/include/spatialaudioclient.h
index d70ef32..a5c6227 100644
--- a/mingw-w64-headers/include/spatialaudioclient.h
+++ b/mingw-w64-headers/include/spatialaudioclient.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/spatialaudioclient.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/spatialaudioclient.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/spellcheck.h b/mingw-w64-headers/include/spellcheck.h
index 39a404e..f4a3fd5 100644
--- a/mingw-w64-headers/include/spellcheck.h
+++ b/mingw-w64-headers/include/spellcheck.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/spellcheck.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/spellcheck.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/strmif.h b/mingw-w64-headers/include/strmif.h
index 4fecab0..d7dac66 100644
--- a/mingw-w64-headers/include/strmif.h
+++ b/mingw-w64-headers/include/strmif.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/strmif.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/strmif.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/structuredquerycondition.h b/mingw-w64-headers/include/structuredquerycondition.h
index e69a320..4994ffb 100644
--- a/mingw-w64-headers/include/structuredquerycondition.h
+++ b/mingw-w64-headers/include/structuredquerycondition.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/structuredquerycondition.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/structuredquerycondition.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/systemmediatransportcontrolsinterop.h b/mingw-w64-headers/include/systemmediatransportcontrolsinterop.h
index 7dbecf4..39ea433 100644
--- a/mingw-w64-headers/include/systemmediatransportcontrolsinterop.h
+++ b/mingw-w64-headers/include/systemmediatransportcontrolsinterop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/systemmediatransportcontrolsinterop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/systemmediatransportcontrolsinterop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/taskschd.h b/mingw-w64-headers/include/taskschd.h
index fdf8469..4926c2d 100644
--- a/mingw-w64-headers/include/taskschd.h
+++ b/mingw-w64-headers/include/taskschd.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/taskschd.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/taskschd.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/textstor.h b/mingw-w64-headers/include/textstor.h
index 11d5a2e..7586860 100644
--- a/mingw-w64-headers/include/textstor.h
+++ b/mingw-w64-headers/include/textstor.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/textstor.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/textstor.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/thumbcache.h b/mingw-w64-headers/include/thumbcache.h
index c27f1d0..cef3720 100644
--- a/mingw-w64-headers/include/thumbcache.h
+++ b/mingw-w64-headers/include/thumbcache.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/thumbcache.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/thumbcache.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/tlbref.h b/mingw-w64-headers/include/tlbref.h
index 4508eff..54a72a6 100644
--- a/mingw-w64-headers/include/tlbref.h
+++ b/mingw-w64-headers/include/tlbref.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/tlbref.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/tlbref.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/tlogstg.h b/mingw-w64-headers/include/tlogstg.h
index b973eb9..e258655 100644
--- a/mingw-w64-headers/include/tlogstg.h
+++ b/mingw-w64-headers/include/tlogstg.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/tlogstg.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/tlogstg.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/tpcshrd.h b/mingw-w64-headers/include/tpcshrd.h
index fa9eb1a..b967fa0 100644
--- a/mingw-w64-headers/include/tpcshrd.h
+++ b/mingw-w64-headers/include/tpcshrd.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/tpcshrd.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/tpcshrd.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/tsvirtualchannels.h b/mingw-w64-headers/include/tsvirtualchannels.h
index 57adb99..aae830a 100644
--- a/mingw-w64-headers/include/tsvirtualchannels.h
+++ b/mingw-w64-headers/include/tsvirtualchannels.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/tsvirtualchannels.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/tsvirtualchannels.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/tuner.h b/mingw-w64-headers/include/tuner.h
index 6ba4121..bfda476 100644
--- a/mingw-w64-headers/include/tuner.h
+++ b/mingw-w64-headers/include/tuner.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/tuner.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/tuner.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/uianimation.h b/mingw-w64-headers/include/uianimation.h
index 2c1305f..6e69752 100644
--- a/mingw-w64-headers/include/uianimation.h
+++ b/mingw-w64-headers/include/uianimation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/uianimation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/uianimation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/uiautomationclient.h b/mingw-w64-headers/include/uiautomationclient.h
index 3cb91e4..7909014 100644
--- a/mingw-w64-headers/include/uiautomationclient.h
+++ b/mingw-w64-headers/include/uiautomationclient.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/uiautomationclient.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/uiautomationclient.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/uiautomationcore.h b/mingw-w64-headers/include/uiautomationcore.h
index 249cace..447dea1 100644
--- a/mingw-w64-headers/include/uiautomationcore.h
+++ b/mingw-w64-headers/include/uiautomationcore.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/uiautomationcore.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/uiautomationcore.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/uiviewsettingsinterop.h b/mingw-w64-headers/include/uiviewsettingsinterop.h
index eb689cd..988bf64 100644
--- a/mingw-w64-headers/include/uiviewsettingsinterop.h
+++ b/mingw-w64-headers/include/uiviewsettingsinterop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/uiviewsettingsinterop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/uiviewsettingsinterop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/unknwn.h b/mingw-w64-headers/include/unknwn.h
index 600e63b..df56a2c 100644
--- a/mingw-w64-headers/include/unknwn.h
+++ b/mingw-w64-headers/include/unknwn.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/unknwn.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/unknwn.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/unknwnbase.h b/mingw-w64-headers/include/unknwnbase.h
index 180558f..f6ac0fc 100644
--- a/mingw-w64-headers/include/unknwnbase.h
+++ b/mingw-w64-headers/include/unknwnbase.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/unknwnbase.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/unknwnbase.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/urlhist.h b/mingw-w64-headers/include/urlhist.h
index ee51920..32dd043 100644
--- a/mingw-w64-headers/include/urlhist.h
+++ b/mingw-w64-headers/include/urlhist.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/urlhist.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/urlhist.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/urlmon.h b/mingw-w64-headers/include/urlmon.h
index c59333f..06b3859 100644
--- a/mingw-w64-headers/include/urlmon.h
+++ b/mingw-w64-headers/include/urlmon.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/urlmon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/urlmon.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vdslun.h b/mingw-w64-headers/include/vdslun.h
index 4751aef..b3aee36 100644
--- a/mingw-w64-headers/include/vdslun.h
+++ b/mingw-w64-headers/include/vdslun.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/vdslun.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/vdslun.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vidcap.h b/mingw-w64-headers/include/vidcap.h
index 854d950..ceaeaec 100644
--- a/mingw-w64-headers/include/vidcap.h
+++ b/mingw-w64-headers/include/vidcap.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/vidcap.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/vidcap.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vmr9.h b/mingw-w64-headers/include/vmr9.h
index f2d2e97..a9aac16 100644
--- a/mingw-w64-headers/include/vmr9.h
+++ b/mingw-w64-headers/include/vmr9.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/vmr9.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/vmr9.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vsadmin.h b/mingw-w64-headers/include/vsadmin.h
index 5bb6498..2244434 100644
--- a/mingw-w64-headers/include/vsadmin.h
+++ b/mingw-w64-headers/include/vsadmin.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/vsadmin.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/vsadmin.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vsbackup.h b/mingw-w64-headers/include/vsbackup.h
index 47ad640..07986b6 100644
--- a/mingw-w64-headers/include/vsbackup.h
+++ b/mingw-w64-headers/include/vsbackup.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/vsbackup.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/vsbackup.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vsmgmt.h b/mingw-w64-headers/include/vsmgmt.h
index 176e01b..95e5b9c 100644
--- a/mingw-w64-headers/include/vsmgmt.h
+++ b/mingw-w64-headers/include/vsmgmt.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/vsmgmt.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/vsmgmt.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vsprov.h b/mingw-w64-headers/include/vsprov.h
index 613ad8b..677308f 100644
--- a/mingw-w64-headers/include/vsprov.h
+++ b/mingw-w64-headers/include/vsprov.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/vsprov.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/vsprov.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vss.h b/mingw-w64-headers/include/vss.h
index fc21424..37cf918 100644
--- a/mingw-w64-headers/include/vss.h
+++ b/mingw-w64-headers/include/vss.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/vss.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/vss.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vswriter.h b/mingw-w64-headers/include/vswriter.h
index 0f818a1..2faa64d 100644
--- a/mingw-w64-headers/include/vswriter.h
+++ b/mingw-w64-headers/include/vswriter.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/vswriter.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/vswriter.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wbemads.h b/mingw-w64-headers/include/wbemads.h
index 54aff2a..0e45c00 100644
--- a/mingw-w64-headers/include/wbemads.h
+++ b/mingw-w64-headers/include/wbemads.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wbemads.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wbemads.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wbemcli.h b/mingw-w64-headers/include/wbemcli.h
index e95ce7e..9950a56 100644
--- a/mingw-w64-headers/include/wbemcli.h
+++ b/mingw-w64-headers/include/wbemcli.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wbemcli.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wbemcli.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wbemdisp.h b/mingw-w64-headers/include/wbemdisp.h
index c5a1fee..fbc8d9a 100644
--- a/mingw-w64-headers/include/wbemdisp.h
+++ b/mingw-w64-headers/include/wbemdisp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wbemdisp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wbemdisp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wbemprov.h b/mingw-w64-headers/include/wbemprov.h
index c647305..062fa76 100644
--- a/mingw-w64-headers/include/wbemprov.h
+++ b/mingw-w64-headers/include/wbemprov.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wbemprov.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wbemprov.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wbemtran.h b/mingw-w64-headers/include/wbemtran.h
index 9b9b87f..83949de 100644
--- a/mingw-w64-headers/include/wbemtran.h
+++ b/mingw-w64-headers/include/wbemtran.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wbemtran.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wbemtran.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wdstptmgmt.h b/mingw-w64-headers/include/wdstptmgmt.h
index 560f344..80d6f56 100644
--- a/mingw-w64-headers/include/wdstptmgmt.h
+++ b/mingw-w64-headers/include/wdstptmgmt.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wdstptmgmt.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wdstptmgmt.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/weakreference.h b/mingw-w64-headers/include/weakreference.h
index 8f885a7..afb9a43 100644
--- a/mingw-w64-headers/include/weakreference.h
+++ b/mingw-w64-headers/include/weakreference.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/weakreference.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/weakreference.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wia_lh.h b/mingw-w64-headers/include/wia_lh.h
index 96eac04..e71c5db 100644
--- a/mingw-w64-headers/include/wia_lh.h
+++ b/mingw-w64-headers/include/wia_lh.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wia_lh.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wia_lh.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wia_xp.h b/mingw-w64-headers/include/wia_xp.h
index ad4f0f4..f19e1d1 100644
--- a/mingw-w64-headers/include/wia_xp.h
+++ b/mingw-w64-headers/include/wia_xp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wia_xp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wia_xp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wincodec.h b/mingw-w64-headers/include/wincodec.h
index ae0bdb7..b6b447e 100644
--- a/mingw-w64-headers/include/wincodec.h
+++ b/mingw-w64-headers/include/wincodec.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wincodec.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wincodec.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wincodecsdk.h b/mingw-w64-headers/include/wincodecsdk.h
index db4645b..98b8176 100644
--- a/mingw-w64-headers/include/wincodecsdk.h
+++ b/mingw-w64-headers/include/wincodecsdk.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wincodecsdk.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wincodecsdk.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.applicationmodel.activation.h b/mingw-w64-headers/include/windows.applicationmodel.activation.h
index 33ddb68..c51cf5d 100644
--- a/mingw-w64-headers/include/windows.applicationmodel.activation.h
+++ b/mingw-w64-headers/include/windows.applicationmodel.activation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.applicationmodel.activation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.applicationmodel.activation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.applicationmodel.background.h b/mingw-w64-headers/include/windows.applicationmodel.background.h
index 4c3276c..d44d9ac 100644
--- a/mingw-w64-headers/include/windows.applicationmodel.background.h
+++ b/mingw-w64-headers/include/windows.applicationmodel.background.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.applicationmodel.background.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.applicationmodel.background.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.applicationmodel.core.h b/mingw-w64-headers/include/windows.applicationmodel.core.h
index 168bd85..056978f 100644
--- a/mingw-w64-headers/include/windows.applicationmodel.core.h
+++ b/mingw-w64-headers/include/windows.applicationmodel.core.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.applicationmodel.core.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.applicationmodel.core.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.applicationmodel.datatransfer.dragdrop.core.h b/mingw-w64-headers/include/windows.applicationmodel.datatransfer.dragdrop.core.h
index 587ea1e..fc14c04 100644
--- a/mingw-w64-headers/include/windows.applicationmodel.datatransfer.dragdrop.core.h
+++ b/mingw-w64-headers/include/windows.applicationmodel.datatransfer.dragdrop.core.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.applicationmodel.datatransfer.dragdrop.core.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.applicationmodel.datatransfer.dragdrop.core.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.applicationmodel.datatransfer.dragdrop.h b/mingw-w64-headers/include/windows.applicationmodel.datatransfer.dragdrop.h
index 1b8623a..0ed1ffd 100644
--- a/mingw-w64-headers/include/windows.applicationmodel.datatransfer.dragdrop.h
+++ b/mingw-w64-headers/include/windows.applicationmodel.datatransfer.dragdrop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.applicationmodel.datatransfer.dragdrop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.applicationmodel.datatransfer.dragdrop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.applicationmodel.datatransfer.h b/mingw-w64-headers/include/windows.applicationmodel.datatransfer.h
index 73444f6..2c9a7a5 100644
--- a/mingw-w64-headers/include/windows.applicationmodel.datatransfer.h
+++ b/mingw-w64-headers/include/windows.applicationmodel.datatransfer.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.applicationmodel.datatransfer.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.applicationmodel.datatransfer.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.applicationmodel.h b/mingw-w64-headers/include/windows.applicationmodel.h
index 3a3444d..41d64f4 100644
--- a/mingw-w64-headers/include/windows.applicationmodel.h
+++ b/mingw-w64-headers/include/windows.applicationmodel.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.applicationmodel.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.applicationmodel.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.data.json.h b/mingw-w64-headers/include/windows.data.json.h
index 486ef57..29487f4 100644
--- a/mingw-w64-headers/include/windows.data.json.h
+++ b/mingw-w64-headers/include/windows.data.json.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.data.json.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.data.json.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.data.xml.dom.h b/mingw-w64-headers/include/windows.data.xml.dom.h
index 388b95d..27c7133 100644
--- a/mingw-w64-headers/include/windows.data.xml.dom.h
+++ b/mingw-w64-headers/include/windows.data.xml.dom.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.data.xml.dom.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.data.xml.dom.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.bluetooth.advertisement.h b/mingw-w64-headers/include/windows.devices.bluetooth.advertisement.h
index d405b68..49d2d23 100644
--- a/mingw-w64-headers/include/windows.devices.bluetooth.advertisement.h
+++ b/mingw-w64-headers/include/windows.devices.bluetooth.advertisement.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.devices.bluetooth.advertisement.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.devices.bluetooth.advertisement.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.bluetooth.genericattributeprofile.h b/mingw-w64-headers/include/windows.devices.bluetooth.genericattributeprofile.h
index f32483a..6e181d3 100644
--- a/mingw-w64-headers/include/windows.devices.bluetooth.genericattributeprofile.h
+++ b/mingw-w64-headers/include/windows.devices.bluetooth.genericattributeprofile.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.devices.bluetooth.genericattributeprofile.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.devices.bluetooth.genericattributeprofile.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.bluetooth.h b/mingw-w64-headers/include/windows.devices.bluetooth.h
index ebbf5dc..8c95f28 100644
--- a/mingw-w64-headers/include/windows.devices.bluetooth.h
+++ b/mingw-w64-headers/include/windows.devices.bluetooth.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.devices.bluetooth.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.devices.bluetooth.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.bluetooth.rfcomm.h b/mingw-w64-headers/include/windows.devices.bluetooth.rfcomm.h
index 6b594e2..1beb766 100644
--- a/mingw-w64-headers/include/windows.devices.bluetooth.rfcomm.h
+++ b/mingw-w64-headers/include/windows.devices.bluetooth.rfcomm.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.devices.bluetooth.rfcomm.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.devices.bluetooth.rfcomm.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.enumeration.h b/mingw-w64-headers/include/windows.devices.enumeration.h
index 4da827c..5a57583 100644
--- a/mingw-w64-headers/include/windows.devices.enumeration.h
+++ b/mingw-w64-headers/include/windows.devices.enumeration.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.devices.enumeration.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.devices.enumeration.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.geolocation.h b/mingw-w64-headers/include/windows.devices.geolocation.h
index 32a1d2c..f86c96f 100644
--- a/mingw-w64-headers/include/windows.devices.geolocation.h
+++ b/mingw-w64-headers/include/windows.devices.geolocation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.devices.geolocation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.devices.geolocation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.haptics.h b/mingw-w64-headers/include/windows.devices.haptics.h
index 4aadcd5..21ff9ac 100644
--- a/mingw-w64-headers/include/windows.devices.haptics.h
+++ b/mingw-w64-headers/include/windows.devices.haptics.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.devices.haptics.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.devices.haptics.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.input.h b/mingw-w64-headers/include/windows.devices.input.h
index 4856be7..54a1a93 100644
--- a/mingw-w64-headers/include/windows.devices.input.h
+++ b/mingw-w64-headers/include/windows.devices.input.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.devices.input.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.devices.input.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.power.h b/mingw-w64-headers/include/windows.devices.power.h
index 4d08d68..0cdcba3 100644
--- a/mingw-w64-headers/include/windows.devices.power.h
+++ b/mingw-w64-headers/include/windows.devices.power.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.devices.power.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.devices.power.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.radios.h b/mingw-w64-headers/include/windows.devices.radios.h
index 9918d12..db60bc4 100644
--- a/mingw-w64-headers/include/windows.devices.radios.h
+++ b/mingw-w64-headers/include/windows.devices.radios.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.devices.radios.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.devices.radios.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.devices.usb.h b/mingw-w64-headers/include/windows.devices.usb.h
index 0e28a93..6e06bd4 100644
--- a/mingw-w64-headers/include/windows.devices.usb.h
+++ b/mingw-w64-headers/include/windows.devices.usb.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.devices.usb.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.devices.usb.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.foundation.collections.h b/mingw-w64-headers/include/windows.foundation.collections.h
index cd0aff0..ec4cf60 100644
--- a/mingw-w64-headers/include/windows.foundation.collections.h
+++ b/mingw-w64-headers/include/windows.foundation.collections.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.foundation.collections.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.foundation.collections.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.foundation.h b/mingw-w64-headers/include/windows.foundation.h
index d20a289..cf8dd51 100644
--- a/mingw-w64-headers/include/windows.foundation.h
+++ b/mingw-w64-headers/include/windows.foundation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.foundation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.foundation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.foundation.metadata.h b/mingw-w64-headers/include/windows.foundation.metadata.h
index 9d4807a..8e93f56 100644
--- a/mingw-w64-headers/include/windows.foundation.metadata.h
+++ b/mingw-w64-headers/include/windows.foundation.metadata.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.foundation.metadata.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.foundation.metadata.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.foundation.numerics.h b/mingw-w64-headers/include/windows.foundation.numerics.h
index 7b07a84..2145cb5 100644
--- a/mingw-w64-headers/include/windows.foundation.numerics.h
+++ b/mingw-w64-headers/include/windows.foundation.numerics.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.foundation.numerics.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.foundation.numerics.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.gaming.input.custom.h b/mingw-w64-headers/include/windows.gaming.input.custom.h
index 0f480f6..a3d1b47 100644
--- a/mingw-w64-headers/include/windows.gaming.input.custom.h
+++ b/mingw-w64-headers/include/windows.gaming.input.custom.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.gaming.input.custom.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.gaming.input.custom.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.gaming.input.forcefeedback.h b/mingw-w64-headers/include/windows.gaming.input.forcefeedback.h
index f64d548..c972c7f 100644
--- a/mingw-w64-headers/include/windows.gaming.input.forcefeedback.h
+++ b/mingw-w64-headers/include/windows.gaming.input.forcefeedback.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.gaming.input.forcefeedback.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.gaming.input.forcefeedback.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.gaming.input.h b/mingw-w64-headers/include/windows.gaming.input.h
index 225a7bd..301165e 100644
--- a/mingw-w64-headers/include/windows.gaming.input.h
+++ b/mingw-w64-headers/include/windows.gaming.input.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.gaming.input.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.gaming.input.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.gaming.ui.h b/mingw-w64-headers/include/windows.gaming.ui.h
index 920119f..bc6bc35 100644
--- a/mingw-w64-headers/include/windows.gaming.ui.h
+++ b/mingw-w64-headers/include/windows.gaming.ui.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.gaming.ui.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.gaming.ui.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.globalization.h b/mingw-w64-headers/include/windows.globalization.h
index 2fe1ef0..52d2fbe 100644
--- a/mingw-w64-headers/include/windows.globalization.h
+++ b/mingw-w64-headers/include/windows.globalization.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.globalization.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.globalization.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.capture.h b/mingw-w64-headers/include/windows.graphics.capture.h
index c563271..8326945 100644
--- a/mingw-w64-headers/include/windows.graphics.capture.h
+++ b/mingw-w64-headers/include/windows.graphics.capture.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.graphics.capture.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.graphics.capture.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.capture.interop.h b/mingw-w64-headers/include/windows.graphics.capture.interop.h
index 234e4b3..a655c84 100644
--- a/mingw-w64-headers/include/windows.graphics.capture.interop.h
+++ b/mingw-w64-headers/include/windows.graphics.capture.interop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.graphics.capture.interop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.graphics.capture.interop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.directx.direct3d11.h b/mingw-w64-headers/include/windows.graphics.directx.direct3d11.h
index 89cd5fc..0b9c580 100644
--- a/mingw-w64-headers/include/windows.graphics.directx.direct3d11.h
+++ b/mingw-w64-headers/include/windows.graphics.directx.direct3d11.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.graphics.directx.direct3d11.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.graphics.directx.direct3d11.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.directx.h b/mingw-w64-headers/include/windows.graphics.directx.h
index 4615732..6104f38 100644
--- a/mingw-w64-headers/include/windows.graphics.directx.h
+++ b/mingw-w64-headers/include/windows.graphics.directx.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.graphics.directx.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.graphics.directx.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.display.h b/mingw-w64-headers/include/windows.graphics.display.h
new file mode 100644
index 0000000..2b4406b
--- /dev/null
+++ b/mingw-w64-headers/include/windows.graphics.display.h
@@ -0,0 +1,1889 @@
+/*** Autogenerated by WIDL 11.5 from include/windows.graphics.display.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 __windows_graphics_display_h__
+#define __windows_graphics_display_h__
+
+/* Forward declarations */
+
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_FWD_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo ABI::Windows::Graphics::Display::IAdvancedColorInfo
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                interface IAdvancedColorInfo;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_FWD_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation ABI::Windows::Graphics::Display::IDisplayInformation
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                interface IDisplayInformation;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_FWD_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2 __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2 ABI::Windows::Graphics::Display::IDisplayInformation2
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                interface IDisplayInformation2;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_FWD_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3 __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3 ABI::Windows::Graphics::Display::IDisplayInformation3
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                interface IDisplayInformation3;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_FWD_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4 __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4 ABI::Windows::Graphics::Display::IDisplayInformation4
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                interface IDisplayInformation4;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_FWD_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5 __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5 ABI::Windows::Graphics::Display::IDisplayInformation5
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                interface IDisplayInformation5;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics ABI::Windows::Graphics::Display::IDisplayInformationStatics
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                interface IDisplayInformationStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CAdvancedColorInfo_FWD_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CAdvancedColorInfo_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                class AdvancedColorInfo;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CGraphics_CDisplay_CAdvancedColorInfo __x_ABI_CWindows_CGraphics_CDisplay_CAdvancedColorInfo;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CGraphics_CDisplay_CAdvancedColorInfo_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CDisplayInformation_FWD_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CDisplayInformation_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                class DisplayInformation;
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CGraphics_CDisplay_CDisplayInformation __x_ABI_CWindows_CGraphics_CDisplay_CDisplayInformation;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CGraphics_CDisplay_CDisplayInformation_FWD_DEFINED__ */
+
+#ifndef ____FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Graphics::Display::DisplayInformation*,IInspectable* >
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
+
+#include <inspectable.h>
+#include <asyncinfo.h>
+#include <eventtoken.h>
+#include <windowscontracts.h>
+#include <windows.foundation.h>
+#include <windows.graphics.h>
+#include <windows.storage.streams.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+#define WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION 0xe0000
+#endif // defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x60000
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CAdvancedColorKind_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CAdvancedColorKind_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                enum AdvancedColorKind {
+                    AdvancedColorKind_StandardDynamicRange = 0,
+                    AdvancedColorKind_WideColorGamut = 1,
+                    AdvancedColorKind_HighDynamicRange = 2
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CGraphics_CDisplay_CAdvancedColorKind {
+    AdvancedColorKind_StandardDynamicRange = 0,
+    AdvancedColorKind_WideColorGamut = 1,
+    AdvancedColorKind_HighDynamicRange = 2
+};
+#ifdef WIDL_using_Windows_Graphics_Display
+#define AdvancedColorKind __x_ABI_CWindows_CGraphics_CDisplay_CAdvancedColorKind
+#endif /* WIDL_using_Windows_Graphics_Display */
+#endif
+
+#endif /* ____x_ABI_CWindows_CGraphics_CDisplay_CAdvancedColorKind_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x60000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CGraphics_CDisplay_CAdvancedColorKind __x_ABI_CWindows_CGraphics_CDisplay_CAdvancedColorKind;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CDisplayOrientations_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CDisplayOrientations_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                enum DisplayOrientations {
+                    DisplayOrientations_None = 0x0,
+                    DisplayOrientations_Landscape = 0x1,
+                    DisplayOrientations_Portrait = 0x2,
+                    DisplayOrientations_LandscapeFlipped = 0x4,
+                    DisplayOrientations_PortraitFlipped = 0x8
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CGraphics_CDisplay_CDisplayOrientations {
+    DisplayOrientations_None = 0x0,
+    DisplayOrientations_Landscape = 0x1,
+    DisplayOrientations_Portrait = 0x2,
+    DisplayOrientations_LandscapeFlipped = 0x4,
+    DisplayOrientations_PortraitFlipped = 0x8
+};
+#ifdef WIDL_using_Windows_Graphics_Display
+#define DisplayOrientations __x_ABI_CWindows_CGraphics_CDisplay_CDisplayOrientations
+#endif /* WIDL_using_Windows_Graphics_Display */
+#endif
+
+#endif /* ____x_ABI_CWindows_CGraphics_CDisplay_CDisplayOrientations_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CGraphics_CDisplay_CDisplayOrientations __x_ABI_CWindows_CGraphics_CDisplay_CDisplayOrientations;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x60000
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CHdrMetadataFormat_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CHdrMetadataFormat_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                enum HdrMetadataFormat {
+                    HdrMetadataFormat_Hdr10 = 0,
+                    HdrMetadataFormat_Hdr10Plus = 1
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CGraphics_CDisplay_CHdrMetadataFormat {
+    HdrMetadataFormat_Hdr10 = 0,
+    HdrMetadataFormat_Hdr10Plus = 1
+};
+#ifdef WIDL_using_Windows_Graphics_Display
+#define HdrMetadataFormat __x_ABI_CWindows_CGraphics_CDisplay_CHdrMetadataFormat
+#endif /* WIDL_using_Windows_Graphics_Display */
+#endif
+
+#endif /* ____x_ABI_CWindows_CGraphics_CDisplay_CHdrMetadataFormat_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x60000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CGraphics_CDisplay_CHdrMetadataFormat __x_ABI_CWindows_CGraphics_CDisplay_CHdrMetadataFormat;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CResolutionScale_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CResolutionScale_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                enum ResolutionScale {
+                    ResolutionScale_Invalid = 0,
+                    ResolutionScale_Scale100Percent = 100,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+                    ResolutionScale_Scale120Percent = 120,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+                    ResolutionScale_Scale125Percent = 125,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+                    ResolutionScale_Scale140Percent = 140,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+                    ResolutionScale_Scale150Percent = 150,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+                    ResolutionScale_Scale160Percent = 160,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+                    ResolutionScale_Scale175Percent = 175,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+                    ResolutionScale_Scale180Percent = 180,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+                    ResolutionScale_Scale200Percent = 200,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+                    ResolutionScale_Scale225Percent = 225,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+                    ResolutionScale_Scale250Percent = 250,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+                    ResolutionScale_Scale300Percent = 300,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+                    ResolutionScale_Scale350Percent = 350,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+                    ResolutionScale_Scale400Percent = 400,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+                    ResolutionScale_Scale450Percent = 450,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+                    ResolutionScale_Scale500Percent = 500
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CGraphics_CDisplay_CResolutionScale {
+    ResolutionScale_Invalid = 0,
+    ResolutionScale_Scale100Percent = 100,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+    ResolutionScale_Scale120Percent = 120,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+    ResolutionScale_Scale125Percent = 125,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+    ResolutionScale_Scale140Percent = 140,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+    ResolutionScale_Scale150Percent = 150,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+    ResolutionScale_Scale160Percent = 160,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+    ResolutionScale_Scale175Percent = 175,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+    ResolutionScale_Scale180Percent = 180,
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+    ResolutionScale_Scale200Percent = 200,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+    ResolutionScale_Scale225Percent = 225,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+    ResolutionScale_Scale250Percent = 250,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+    ResolutionScale_Scale300Percent = 300,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+    ResolutionScale_Scale350Percent = 350,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+    ResolutionScale_Scale400Percent = 400,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+    ResolutionScale_Scale450Percent = 450,
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+    ResolutionScale_Scale500Percent = 500
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+};
+#ifdef WIDL_using_Windows_Graphics_Display
+#define ResolutionScale __x_ABI_CWindows_CGraphics_CDisplay_CResolutionScale
+#endif /* WIDL_using_Windows_Graphics_Display */
+#endif
+
+#endif /* ____x_ABI_CWindows_CGraphics_CDisplay_CResolutionScale_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CGraphics_CDisplay_CResolutionScale __x_ABI_CWindows_CGraphics_CDisplay_CResolutionScale;
+#endif /* __cplusplus */
+
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_FWD_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo ABI::Windows::Graphics::Display::IAdvancedColorInfo
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                interface IAdvancedColorInfo;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics ABI::Windows::Graphics::Display::IDisplayInformationStatics
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                interface IDisplayInformationStatics;
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+/*****************************************************************************
+ * IAdvancedColorInfo interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x60000
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo, 0x8797dcfb, 0xb229, 0x4081, 0xae,0x9a, 0x2c,0xc8,0x5e,0x34,0xad,0x6a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                MIDL_INTERFACE("8797dcfb-b229-4081-ae9a-2cc85e34ad6a")
+                IAdvancedColorInfo : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_CurrentAdvancedColorKind(
+                        ABI::Windows::Graphics::Display::AdvancedColorKind *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_RedPrimary(
+                        ABI::Windows::Foundation::Point *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_GreenPrimary(
+                        ABI::Windows::Foundation::Point *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_BluePrimary(
+                        ABI::Windows::Foundation::Point *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_WhitePoint(
+                        ABI::Windows::Foundation::Point *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_MaxLuminanceInNits(
+                        FLOAT *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_MinLuminanceInNits(
+                        FLOAT *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_MaxAverageFullFrameLuminanceInNits(
+                        FLOAT *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_SdrWhiteLevelInNits(
+                        FLOAT *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE IsHdrMetadataFormatCurrentlySupported(
+                        ABI::Windows::Graphics::Display::HdrMetadataFormat format,
+                        boolean *result) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE IsAdvancedColorKindAvailable(
+                        ABI::Windows::Graphics::Display::AdvancedColorKind kind,
+                        boolean *result) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo, 0x8797dcfb, 0xb229, 0x4081, 0xae,0x9a, 0x2c,0xc8,0x5e,0x34,0xad,0x6a)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo *This,
+        TrustLevel *trustLevel);
+
+    /*** IAdvancedColorInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CurrentAdvancedColorKind)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo *This,
+        __x_ABI_CWindows_CGraphics_CDisplay_CAdvancedColorKind *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_RedPrimary)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo *This,
+        __x_ABI_CWindows_CFoundation_CPoint *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_GreenPrimary)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo *This,
+        __x_ABI_CWindows_CFoundation_CPoint *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_BluePrimary)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo *This,
+        __x_ABI_CWindows_CFoundation_CPoint *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_WhitePoint)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo *This,
+        __x_ABI_CWindows_CFoundation_CPoint *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_MaxLuminanceInNits)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo *This,
+        FLOAT *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_MinLuminanceInNits)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo *This,
+        FLOAT *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_MaxAverageFullFrameLuminanceInNits)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo *This,
+        FLOAT *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_SdrWhiteLevelInNits)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo *This,
+        FLOAT *value);
+
+    HRESULT (STDMETHODCALLTYPE *IsHdrMetadataFormatCurrentlySupported)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo *This,
+        __x_ABI_CWindows_CGraphics_CDisplay_CHdrMetadataFormat format,
+        boolean *result);
+
+    HRESULT (STDMETHODCALLTYPE *IsAdvancedColorKindAvailable)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo *This,
+        __x_ABI_CWindows_CGraphics_CDisplay_CAdvancedColorKind kind,
+        boolean *result);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfoVtbl;
+
+interface __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo {
+    CONST_VTBL __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IAdvancedColorInfo methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_CurrentAdvancedColorKind(This,value) (This)->lpVtbl->get_CurrentAdvancedColorKind(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_RedPrimary(This,value) (This)->lpVtbl->get_RedPrimary(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_GreenPrimary(This,value) (This)->lpVtbl->get_GreenPrimary(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_BluePrimary(This,value) (This)->lpVtbl->get_BluePrimary(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_WhitePoint(This,value) (This)->lpVtbl->get_WhitePoint(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_MaxLuminanceInNits(This,value) (This)->lpVtbl->get_MaxLuminanceInNits(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_MinLuminanceInNits(This,value) (This)->lpVtbl->get_MinLuminanceInNits(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_MaxAverageFullFrameLuminanceInNits(This,value) (This)->lpVtbl->get_MaxAverageFullFrameLuminanceInNits(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_SdrWhiteLevelInNits(This,value) (This)->lpVtbl->get_SdrWhiteLevelInNits(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_IsHdrMetadataFormatCurrentlySupported(This,format,result) (This)->lpVtbl->IsHdrMetadataFormatCurrentlySupported(This,format,result)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_IsAdvancedColorKindAvailable(This,kind,result) (This)->lpVtbl->IsAdvancedColorKindAvailable(This,kind,result)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_QueryInterface(__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_AddRef(__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_Release(__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_GetIids(__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_GetRuntimeClassName(__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_GetTrustLevel(__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IAdvancedColorInfo methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_CurrentAdvancedColorKind(__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo* This,__x_ABI_CWindows_CGraphics_CDisplay_CAdvancedColorKind *value) {
+    return This->lpVtbl->get_CurrentAdvancedColorKind(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_RedPrimary(__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo* This,__x_ABI_CWindows_CFoundation_CPoint *value) {
+    return This->lpVtbl->get_RedPrimary(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_GreenPrimary(__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo* This,__x_ABI_CWindows_CFoundation_CPoint *value) {
+    return This->lpVtbl->get_GreenPrimary(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_BluePrimary(__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo* This,__x_ABI_CWindows_CFoundation_CPoint *value) {
+    return This->lpVtbl->get_BluePrimary(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_WhitePoint(__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo* This,__x_ABI_CWindows_CFoundation_CPoint *value) {
+    return This->lpVtbl->get_WhitePoint(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_MaxLuminanceInNits(__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo* This,FLOAT *value) {
+    return This->lpVtbl->get_MaxLuminanceInNits(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_MinLuminanceInNits(__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo* This,FLOAT *value) {
+    return This->lpVtbl->get_MinLuminanceInNits(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_MaxAverageFullFrameLuminanceInNits(__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo* This,FLOAT *value) {
+    return This->lpVtbl->get_MaxAverageFullFrameLuminanceInNits(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_SdrWhiteLevelInNits(__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo* This,FLOAT *value) {
+    return This->lpVtbl->get_SdrWhiteLevelInNits(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_IsHdrMetadataFormatCurrentlySupported(__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo* This,__x_ABI_CWindows_CGraphics_CDisplay_CHdrMetadataFormat format,boolean *result) {
+    return This->lpVtbl->IsHdrMetadataFormatCurrentlySupported(This,format,result);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_IsAdvancedColorKindAvailable(__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo* This,__x_ABI_CWindows_CGraphics_CDisplay_CAdvancedColorKind kind,boolean *result) {
+    return This->lpVtbl->IsAdvancedColorKindAvailable(This,kind,result);
+}
+#endif
+#ifdef WIDL_using_Windows_Graphics_Display
+#define IID_IAdvancedColorInfo IID___x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo
+#define IAdvancedColorInfoVtbl __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfoVtbl
+#define IAdvancedColorInfo __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo
+#define IAdvancedColorInfo_QueryInterface __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_QueryInterface
+#define IAdvancedColorInfo_AddRef __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_AddRef
+#define IAdvancedColorInfo_Release __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_Release
+#define IAdvancedColorInfo_GetIids __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_GetIids
+#define IAdvancedColorInfo_GetRuntimeClassName __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_GetRuntimeClassName
+#define IAdvancedColorInfo_GetTrustLevel __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_GetTrustLevel
+#define IAdvancedColorInfo_get_CurrentAdvancedColorKind __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_CurrentAdvancedColorKind
+#define IAdvancedColorInfo_get_RedPrimary __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_RedPrimary
+#define IAdvancedColorInfo_get_GreenPrimary __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_GreenPrimary
+#define IAdvancedColorInfo_get_BluePrimary __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_BluePrimary
+#define IAdvancedColorInfo_get_WhitePoint __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_WhitePoint
+#define IAdvancedColorInfo_get_MaxLuminanceInNits __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_MaxLuminanceInNits
+#define IAdvancedColorInfo_get_MinLuminanceInNits __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_MinLuminanceInNits
+#define IAdvancedColorInfo_get_MaxAverageFullFrameLuminanceInNits __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_MaxAverageFullFrameLuminanceInNits
+#define IAdvancedColorInfo_get_SdrWhiteLevelInNits __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_get_SdrWhiteLevelInNits
+#define IAdvancedColorInfo_IsHdrMetadataFormatCurrentlySupported __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_IsHdrMetadataFormatCurrentlySupported
+#define IAdvancedColorInfo_IsAdvancedColorKindAvailable __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_IsAdvancedColorKindAvailable
+#endif /* WIDL_using_Windows_Graphics_Display */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x60000 */
+
+/*****************************************************************************
+ * IDisplayInformation interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation, 0xbed112ae, 0xadc3, 0x4dc9, 0xae,0x65, 0x85,0x1f,0x4d,0x7d,0x47,0x99);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                MIDL_INTERFACE("bed112ae-adc3-4dc9-ae65-851f4d7d4799")
+                IDisplayInformation : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_CurrentOrientation(
+                        ABI::Windows::Graphics::Display::DisplayOrientations *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_NativeOrientation(
+                        ABI::Windows::Graphics::Display::DisplayOrientations *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE add_OrientationChanged(
+                        ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Graphics::Display::DisplayInformation*,IInspectable* > *handler,
+                        EventRegistrationToken *token) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE remove_OrientationChanged(
+                        EventRegistrationToken token) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_ResolutionScale(
+                        ABI::Windows::Graphics::Display::ResolutionScale *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_LogicalDpi(
+                        FLOAT *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_RawDpiX(
+                        FLOAT *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_RawDpiY(
+                        FLOAT *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE add_DpiChanged(
+                        ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Graphics::Display::DisplayInformation*,IInspectable* > *handler,
+                        EventRegistrationToken *token) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE remove_DpiChanged(
+                        EventRegistrationToken token) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_StereoEnabled(
+                        boolean *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE add_StereoEnabledChanged(
+                        ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Graphics::Display::DisplayInformation*,IInspectable* > *handler,
+                        EventRegistrationToken *token) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE remove_StereoEnabledChanged(
+                        EventRegistrationToken token) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE GetColorProfileAsync(
+                        ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Storage::Streams::IRandomAccessStream* > **async_info) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE add_ColorProfileChanged(
+                        ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Graphics::Display::DisplayInformation*,IInspectable* > *handler,
+                        EventRegistrationToken *token) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE remove_ColorProfileChanged(
+                        EventRegistrationToken token) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation, 0xbed112ae, 0xadc3, 0x4dc9, 0xae,0x65, 0x85,0x1f,0x4d,0x7d,0x47,0x99)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        TrustLevel *trustLevel);
+
+    /*** IDisplayInformation methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CurrentOrientation)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        __x_ABI_CWindows_CGraphics_CDisplay_CDisplayOrientations *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_NativeOrientation)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        __x_ABI_CWindows_CGraphics_CDisplay_CDisplayOrientations *value);
+
+    HRESULT (STDMETHODCALLTYPE *add_OrientationChanged)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable *handler,
+        EventRegistrationToken *token);
+
+    HRESULT (STDMETHODCALLTYPE *remove_OrientationChanged)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        EventRegistrationToken token);
+
+    HRESULT (STDMETHODCALLTYPE *get_ResolutionScale)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        __x_ABI_CWindows_CGraphics_CDisplay_CResolutionScale *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_LogicalDpi)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        FLOAT *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_RawDpiX)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        FLOAT *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_RawDpiY)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        FLOAT *value);
+
+    HRESULT (STDMETHODCALLTYPE *add_DpiChanged)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable *handler,
+        EventRegistrationToken *token);
+
+    HRESULT (STDMETHODCALLTYPE *remove_DpiChanged)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        EventRegistrationToken token);
+
+    HRESULT (STDMETHODCALLTYPE *get_StereoEnabled)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *add_StereoEnabledChanged)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable *handler,
+        EventRegistrationToken *token);
+
+    HRESULT (STDMETHODCALLTYPE *remove_StereoEnabledChanged)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        EventRegistrationToken token);
+
+    HRESULT (STDMETHODCALLTYPE *GetColorProfileAsync)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        __FIAsyncOperation_1_Windows__CStorage__CStreams__CIRandomAccessStream **async_info);
+
+    HRESULT (STDMETHODCALLTYPE *add_ColorProfileChanged)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable *handler,
+        EventRegistrationToken *token);
+
+    HRESULT (STDMETHODCALLTYPE *remove_ColorProfileChanged)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *This,
+        EventRegistrationToken token);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationVtbl;
+
+interface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation {
+    CONST_VTBL __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IDisplayInformation methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_CurrentOrientation(This,value) (This)->lpVtbl->get_CurrentOrientation(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_NativeOrientation(This,value) (This)->lpVtbl->get_NativeOrientation(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_add_OrientationChanged(This,handler,token) (This)->lpVtbl->add_OrientationChanged(This,handler,token)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_remove_OrientationChanged(This,token) (This)->lpVtbl->remove_OrientationChanged(This,token)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_ResolutionScale(This,value) (This)->lpVtbl->get_ResolutionScale(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_LogicalDpi(This,value) (This)->lpVtbl->get_LogicalDpi(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_RawDpiX(This,value) (This)->lpVtbl->get_RawDpiX(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_RawDpiY(This,value) (This)->lpVtbl->get_RawDpiY(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_add_DpiChanged(This,handler,token) (This)->lpVtbl->add_DpiChanged(This,handler,token)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_remove_DpiChanged(This,token) (This)->lpVtbl->remove_DpiChanged(This,token)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_StereoEnabled(This,value) (This)->lpVtbl->get_StereoEnabled(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_add_StereoEnabledChanged(This,handler,token) (This)->lpVtbl->add_StereoEnabledChanged(This,handler,token)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_remove_StereoEnabledChanged(This,token) (This)->lpVtbl->remove_StereoEnabledChanged(This,token)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_GetColorProfileAsync(This,async_info) (This)->lpVtbl->GetColorProfileAsync(This,async_info)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_add_ColorProfileChanged(This,handler,token) (This)->lpVtbl->add_ColorProfileChanged(This,handler,token)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_remove_ColorProfileChanged(This,token) (This)->lpVtbl->remove_ColorProfileChanged(This,token)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_QueryInterface(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_AddRef(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_Release(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_GetIids(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_GetRuntimeClassName(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_GetTrustLevel(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IDisplayInformation methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_CurrentOrientation(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,__x_ABI_CWindows_CGraphics_CDisplay_CDisplayOrientations *value) {
+    return This->lpVtbl->get_CurrentOrientation(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_NativeOrientation(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,__x_ABI_CWindows_CGraphics_CDisplay_CDisplayOrientations *value) {
+    return This->lpVtbl->get_NativeOrientation(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_add_OrientationChanged(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,__FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable *handler,EventRegistrationToken *token) {
+    return This->lpVtbl->add_OrientationChanged(This,handler,token);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_remove_OrientationChanged(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,EventRegistrationToken token) {
+    return This->lpVtbl->remove_OrientationChanged(This,token);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_ResolutionScale(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,__x_ABI_CWindows_CGraphics_CDisplay_CResolutionScale *value) {
+    return This->lpVtbl->get_ResolutionScale(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_LogicalDpi(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,FLOAT *value) {
+    return This->lpVtbl->get_LogicalDpi(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_RawDpiX(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,FLOAT *value) {
+    return This->lpVtbl->get_RawDpiX(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_RawDpiY(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,FLOAT *value) {
+    return This->lpVtbl->get_RawDpiY(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_add_DpiChanged(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,__FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable *handler,EventRegistrationToken *token) {
+    return This->lpVtbl->add_DpiChanged(This,handler,token);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_remove_DpiChanged(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,EventRegistrationToken token) {
+    return This->lpVtbl->remove_DpiChanged(This,token);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_StereoEnabled(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,boolean *value) {
+    return This->lpVtbl->get_StereoEnabled(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_add_StereoEnabledChanged(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,__FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable *handler,EventRegistrationToken *token) {
+    return This->lpVtbl->add_StereoEnabledChanged(This,handler,token);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_remove_StereoEnabledChanged(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,EventRegistrationToken token) {
+    return This->lpVtbl->remove_StereoEnabledChanged(This,token);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_GetColorProfileAsync(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,__FIAsyncOperation_1_Windows__CStorage__CStreams__CIRandomAccessStream **async_info) {
+    return This->lpVtbl->GetColorProfileAsync(This,async_info);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_add_ColorProfileChanged(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,__FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable *handler,EventRegistrationToken *token) {
+    return This->lpVtbl->add_ColorProfileChanged(This,handler,token);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_remove_ColorProfileChanged(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation* This,EventRegistrationToken token) {
+    return This->lpVtbl->remove_ColorProfileChanged(This,token);
+}
+#endif
+#ifdef WIDL_using_Windows_Graphics_Display
+#define IID_IDisplayInformation IID___x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation
+#define IDisplayInformationVtbl __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationVtbl
+#define IDisplayInformation __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation
+#define IDisplayInformation_QueryInterface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_QueryInterface
+#define IDisplayInformation_AddRef __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_AddRef
+#define IDisplayInformation_Release __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_Release
+#define IDisplayInformation_GetIids __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_GetIids
+#define IDisplayInformation_GetRuntimeClassName __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_GetRuntimeClassName
+#define IDisplayInformation_GetTrustLevel __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_GetTrustLevel
+#define IDisplayInformation_get_CurrentOrientation __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_CurrentOrientation
+#define IDisplayInformation_get_NativeOrientation __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_NativeOrientation
+#define IDisplayInformation_add_OrientationChanged __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_add_OrientationChanged
+#define IDisplayInformation_remove_OrientationChanged __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_remove_OrientationChanged
+#define IDisplayInformation_get_ResolutionScale __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_ResolutionScale
+#define IDisplayInformation_get_LogicalDpi __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_LogicalDpi
+#define IDisplayInformation_get_RawDpiX __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_RawDpiX
+#define IDisplayInformation_get_RawDpiY __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_RawDpiY
+#define IDisplayInformation_add_DpiChanged __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_add_DpiChanged
+#define IDisplayInformation_remove_DpiChanged __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_remove_DpiChanged
+#define IDisplayInformation_get_StereoEnabled __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_get_StereoEnabled
+#define IDisplayInformation_add_StereoEnabledChanged __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_add_StereoEnabledChanged
+#define IDisplayInformation_remove_StereoEnabledChanged __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_remove_StereoEnabledChanged
+#define IDisplayInformation_GetColorProfileAsync __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_GetColorProfileAsync
+#define IDisplayInformation_add_ColorProfileChanged __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_add_ColorProfileChanged
+#define IDisplayInformation_remove_ColorProfileChanged __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_remove_ColorProfileChanged
+#endif /* WIDL_using_Windows_Graphics_Display */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IDisplayInformation2 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2, 0x4dcd0021, 0xfad1, 0x4b8e, 0x8e,0xdf, 0x77,0x58,0x87,0xb8,0xbf,0x19);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                MIDL_INTERFACE("4dcd0021-fad1-4b8e-8edf-775887b8bf19")
+                IDisplayInformation2 : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_RawPixelsPerViewPixel(
+                        DOUBLE *value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2, 0x4dcd0021, 0xfad1, 0x4b8e, 0x8e,0xdf, 0x77,0x58,0x87,0xb8,0xbf,0x19)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2 *This,
+        TrustLevel *trustLevel);
+
+    /*** IDisplayInformation2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_RawPixelsPerViewPixel)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2 *This,
+        DOUBLE *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2Vtbl;
+
+interface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2 {
+    CONST_VTBL __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IDisplayInformation2 methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_get_RawPixelsPerViewPixel(This,value) (This)->lpVtbl->get_RawPixelsPerViewPixel(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_QueryInterface(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_AddRef(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_Release(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_GetIids(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_GetRuntimeClassName(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_GetTrustLevel(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IDisplayInformation2 methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_get_RawPixelsPerViewPixel(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2* This,DOUBLE *value) {
+    return This->lpVtbl->get_RawPixelsPerViewPixel(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Graphics_Display
+#define IID_IDisplayInformation2 IID___x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2
+#define IDisplayInformation2Vtbl __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2Vtbl
+#define IDisplayInformation2 __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2
+#define IDisplayInformation2_QueryInterface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_QueryInterface
+#define IDisplayInformation2_AddRef __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_AddRef
+#define IDisplayInformation2_Release __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_Release
+#define IDisplayInformation2_GetIids __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_GetIids
+#define IDisplayInformation2_GetRuntimeClassName __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_GetRuntimeClassName
+#define IDisplayInformation2_GetTrustLevel __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_GetTrustLevel
+#define IDisplayInformation2_get_RawPixelsPerViewPixel __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_get_RawPixelsPerViewPixel
+#endif /* WIDL_using_Windows_Graphics_Display */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation2_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IDisplayInformation3 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3, 0xdb15011d, 0x0f09, 0x4466, 0x8f,0xf3, 0x11,0xde,0x9a,0x3c,0x92,0x9a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                MIDL_INTERFACE("db15011d-0f09-4466-8ff3-11de9a3c929a")
+                IDisplayInformation3 : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_DiagonalSizeInInches(
+                        ABI::Windows::Foundation::IReference<DOUBLE > **value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3, 0xdb15011d, 0x0f09, 0x4466, 0x8f,0xf3, 0x11,0xde,0x9a,0x3c,0x92,0x9a)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3 *This,
+        TrustLevel *trustLevel);
+
+    /*** IDisplayInformation3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_DiagonalSizeInInches)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3 *This,
+        __FIReference_1_DOUBLE **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3Vtbl;
+
+interface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3 {
+    CONST_VTBL __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IDisplayInformation3 methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_get_DiagonalSizeInInches(This,value) (This)->lpVtbl->get_DiagonalSizeInInches(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_QueryInterface(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_AddRef(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_Release(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_GetIids(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_GetRuntimeClassName(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_GetTrustLevel(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IDisplayInformation3 methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_get_DiagonalSizeInInches(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3* This,__FIReference_1_DOUBLE **value) {
+    return This->lpVtbl->get_DiagonalSizeInInches(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Graphics_Display
+#define IID_IDisplayInformation3 IID___x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3
+#define IDisplayInformation3Vtbl __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3Vtbl
+#define IDisplayInformation3 __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3
+#define IDisplayInformation3_QueryInterface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_QueryInterface
+#define IDisplayInformation3_AddRef __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_AddRef
+#define IDisplayInformation3_Release __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_Release
+#define IDisplayInformation3_GetIids __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_GetIids
+#define IDisplayInformation3_GetRuntimeClassName __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_GetRuntimeClassName
+#define IDisplayInformation3_GetTrustLevel __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_GetTrustLevel
+#define IDisplayInformation3_get_DiagonalSizeInInches __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_get_DiagonalSizeInInches
+#endif /* WIDL_using_Windows_Graphics_Display */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation3_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000 */
+
+/*****************************************************************************
+ * IDisplayInformation4 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x30000
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4, 0xc972ce2f, 0x1242, 0x46be, 0xb5,0x36, 0xe1,0xaa,0xfe,0x9e,0x7a,0xcf);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                MIDL_INTERFACE("c972ce2f-1242-46be-b536-e1aafe9e7acf")
+                IDisplayInformation4 : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE get_ScreenWidthInRawPixels(
+                        UINT32 *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_ScreenHeightInRawPixels(
+                        UINT32 *value) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4, 0xc972ce2f, 0x1242, 0x46be, 0xb5,0x36, 0xe1,0xaa,0xfe,0x9e,0x7a,0xcf)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4 *This,
+        TrustLevel *trustLevel);
+
+    /*** IDisplayInformation4 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_ScreenWidthInRawPixels)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4 *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ScreenHeightInRawPixels)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4 *This,
+        UINT32 *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4Vtbl;
+
+interface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4 {
+    CONST_VTBL __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IDisplayInformation4 methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_get_ScreenWidthInRawPixels(This,value) (This)->lpVtbl->get_ScreenWidthInRawPixels(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_get_ScreenHeightInRawPixels(This,value) (This)->lpVtbl->get_ScreenHeightInRawPixels(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_QueryInterface(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_AddRef(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_Release(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_GetIids(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_GetRuntimeClassName(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_GetTrustLevel(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IDisplayInformation4 methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_get_ScreenWidthInRawPixels(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4* This,UINT32 *value) {
+    return This->lpVtbl->get_ScreenWidthInRawPixels(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_get_ScreenHeightInRawPixels(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4* This,UINT32 *value) {
+    return This->lpVtbl->get_ScreenHeightInRawPixels(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Graphics_Display
+#define IID_IDisplayInformation4 IID___x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4
+#define IDisplayInformation4Vtbl __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4Vtbl
+#define IDisplayInformation4 __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4
+#define IDisplayInformation4_QueryInterface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_QueryInterface
+#define IDisplayInformation4_AddRef __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_AddRef
+#define IDisplayInformation4_Release __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_Release
+#define IDisplayInformation4_GetIids __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_GetIids
+#define IDisplayInformation4_GetRuntimeClassName __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_GetRuntimeClassName
+#define IDisplayInformation4_GetTrustLevel __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_GetTrustLevel
+#define IDisplayInformation4_get_ScreenWidthInRawPixels __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_get_ScreenWidthInRawPixels
+#define IDisplayInformation4_get_ScreenHeightInRawPixels __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_get_ScreenHeightInRawPixels
+#endif /* WIDL_using_Windows_Graphics_Display */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation4_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x30000 */
+
+/*****************************************************************************
+ * IDisplayInformation5 interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x60000
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5, 0x3a5442dc, 0x2cde, 0x4a8d, 0x80,0xd1, 0x21,0xdc,0x5a,0xdc,0xc1,0xaa);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                MIDL_INTERFACE("3a5442dc-2cde-4a8d-80d1-21dc5adcc1aa")
+                IDisplayInformation5 : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE GetAdvancedColorInfo(
+                        ABI::Windows::Graphics::Display::IAdvancedColorInfo **value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE add_AdvancedColorInfoChanged(
+                        ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Graphics::Display::DisplayInformation*,IInspectable* > *handler,
+                        EventRegistrationToken *token) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE remove_AdvancedColorInfoChanged(
+                        EventRegistrationToken token) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5, 0x3a5442dc, 0x2cde, 0x4a8d, 0x80,0xd1, 0x21,0xdc,0x5a,0xdc,0xc1,0xaa)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5 *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5 *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5 *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5 *This,
+        TrustLevel *trustLevel);
+
+    /*** IDisplayInformation5 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetAdvancedColorInfo)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5 *This,
+        __x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo **value);
+
+    HRESULT (STDMETHODCALLTYPE *add_AdvancedColorInfoChanged)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5 *This,
+        __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable *handler,
+        EventRegistrationToken *token);
+
+    HRESULT (STDMETHODCALLTYPE *remove_AdvancedColorInfoChanged)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5 *This,
+        EventRegistrationToken token);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5Vtbl;
+
+interface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5 {
+    CONST_VTBL __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IDisplayInformation5 methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_GetAdvancedColorInfo(This,value) (This)->lpVtbl->GetAdvancedColorInfo(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_add_AdvancedColorInfoChanged(This,handler,token) (This)->lpVtbl->add_AdvancedColorInfoChanged(This,handler,token)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_remove_AdvancedColorInfoChanged(This,token) (This)->lpVtbl->remove_AdvancedColorInfoChanged(This,token)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_QueryInterface(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_AddRef(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_Release(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_GetIids(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_GetRuntimeClassName(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_GetTrustLevel(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IDisplayInformation5 methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_GetAdvancedColorInfo(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5* This,__x_ABI_CWindows_CGraphics_CDisplay_CIAdvancedColorInfo **value) {
+    return This->lpVtbl->GetAdvancedColorInfo(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_add_AdvancedColorInfoChanged(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5* This,__FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable *handler,EventRegistrationToken *token) {
+    return This->lpVtbl->add_AdvancedColorInfoChanged(This,handler,token);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_remove_AdvancedColorInfoChanged(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5* This,EventRegistrationToken token) {
+    return This->lpVtbl->remove_AdvancedColorInfoChanged(This,token);
+}
+#endif
+#ifdef WIDL_using_Windows_Graphics_Display
+#define IID_IDisplayInformation5 IID___x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5
+#define IDisplayInformation5Vtbl __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5Vtbl
+#define IDisplayInformation5 __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5
+#define IDisplayInformation5_QueryInterface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_QueryInterface
+#define IDisplayInformation5_AddRef __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_AddRef
+#define IDisplayInformation5_Release __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_Release
+#define IDisplayInformation5_GetIids __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_GetIids
+#define IDisplayInformation5_GetRuntimeClassName __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_GetRuntimeClassName
+#define IDisplayInformation5_GetTrustLevel __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_GetTrustLevel
+#define IDisplayInformation5_GetAdvancedColorInfo __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_GetAdvancedColorInfo
+#define IDisplayInformation5_add_AdvancedColorInfoChanged __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_add_AdvancedColorInfoChanged
+#define IDisplayInformation5_remove_AdvancedColorInfoChanged __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_remove_AdvancedColorInfoChanged
+#endif /* WIDL_using_Windows_Graphics_Display */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation5_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x60000 */
+
+/*****************************************************************************
+ * IDisplayInformationStatics interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics, 0xc6a02a6c, 0xd452, 0x44dc, 0xba,0x07, 0x96,0xf3,0xc6,0xad,0xf9,0xd1);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Graphics {
+            namespace Display {
+                MIDL_INTERFACE("c6a02a6c-d452-44dc-ba07-96f3c6adf9d1")
+                IDisplayInformationStatics : public IInspectable
+                {
+                    virtual HRESULT STDMETHODCALLTYPE GetForCurrentView(
+                        ABI::Windows::Graphics::Display::IDisplayInformation **current) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE get_AutoRotationPreferences(
+                        ABI::Windows::Graphics::Display::DisplayOrientations *value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE put_AutoRotationPreferences(
+                        ABI::Windows::Graphics::Display::DisplayOrientations value) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE add_DisplayContentsInvalidated(
+                        ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Graphics::Display::DisplayInformation*,IInspectable* > *handler,
+                        EventRegistrationToken *token) = 0;
+
+                    virtual HRESULT STDMETHODCALLTYPE remove_DisplayContentsInvalidated(
+                        EventRegistrationToken token) = 0;
+
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics, 0xc6a02a6c, 0xd452, 0x44dc, 0xba,0x07, 0x96,0xf3,0xc6,0xad,0xf9,0xd1)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStaticsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics *This,
+        TrustLevel *trustLevel);
+
+    /*** IDisplayInformationStatics methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetForCurrentView)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics *This,
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation **current);
+
+    HRESULT (STDMETHODCALLTYPE *get_AutoRotationPreferences)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics *This,
+        __x_ABI_CWindows_CGraphics_CDisplay_CDisplayOrientations *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_AutoRotationPreferences)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics *This,
+        __x_ABI_CWindows_CGraphics_CDisplay_CDisplayOrientations value);
+
+    HRESULT (STDMETHODCALLTYPE *add_DisplayContentsInvalidated)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics *This,
+        __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable *handler,
+        EventRegistrationToken *token);
+
+    HRESULT (STDMETHODCALLTYPE *remove_DisplayContentsInvalidated)(
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics *This,
+        EventRegistrationToken token);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStaticsVtbl;
+
+interface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics {
+    CONST_VTBL __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStaticsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IDisplayInformationStatics methods ***/
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_GetForCurrentView(This,current) (This)->lpVtbl->GetForCurrentView(This,current)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_get_AutoRotationPreferences(This,value) (This)->lpVtbl->get_AutoRotationPreferences(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_put_AutoRotationPreferences(This,value) (This)->lpVtbl->put_AutoRotationPreferences(This,value)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_add_DisplayContentsInvalidated(This,handler,token) (This)->lpVtbl->add_DisplayContentsInvalidated(This,handler,token)
+#define __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_remove_DisplayContentsInvalidated(This,token) (This)->lpVtbl->remove_DisplayContentsInvalidated(This,token)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_QueryInterface(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_AddRef(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_Release(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_GetIids(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_GetRuntimeClassName(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_GetTrustLevel(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IDisplayInformationStatics methods ***/
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_GetForCurrentView(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics* This,__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation **current) {
+    return This->lpVtbl->GetForCurrentView(This,current);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_get_AutoRotationPreferences(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics* This,__x_ABI_CWindows_CGraphics_CDisplay_CDisplayOrientations *value) {
+    return This->lpVtbl->get_AutoRotationPreferences(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_put_AutoRotationPreferences(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics* This,__x_ABI_CWindows_CGraphics_CDisplay_CDisplayOrientations value) {
+    return This->lpVtbl->put_AutoRotationPreferences(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_add_DisplayContentsInvalidated(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics* This,__FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable *handler,EventRegistrationToken *token) {
+    return This->lpVtbl->add_DisplayContentsInvalidated(This,handler,token);
+}
+static inline HRESULT __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_remove_DisplayContentsInvalidated(__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics* This,EventRegistrationToken token) {
+    return This->lpVtbl->remove_DisplayContentsInvalidated(This,token);
+}
+#endif
+#ifdef WIDL_using_Windows_Graphics_Display
+#define IID_IDisplayInformationStatics IID___x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics
+#define IDisplayInformationStaticsVtbl __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStaticsVtbl
+#define IDisplayInformationStatics __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics
+#define IDisplayInformationStatics_QueryInterface __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_QueryInterface
+#define IDisplayInformationStatics_AddRef __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_AddRef
+#define IDisplayInformationStatics_Release __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_Release
+#define IDisplayInformationStatics_GetIids __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_GetIids
+#define IDisplayInformationStatics_GetRuntimeClassName __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_GetRuntimeClassName
+#define IDisplayInformationStatics_GetTrustLevel __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_GetTrustLevel
+#define IDisplayInformationStatics_GetForCurrentView __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_GetForCurrentView
+#define IDisplayInformationStatics_get_AutoRotationPreferences __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_get_AutoRotationPreferences
+#define IDisplayInformationStatics_put_AutoRotationPreferences __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_put_AutoRotationPreferences
+#define IDisplayInformationStatics_add_DisplayContentsInvalidated __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_add_DisplayContentsInvalidated
+#define IDisplayInformationStatics_remove_DisplayContentsInvalidated __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_remove_DisplayContentsInvalidated
+#endif /* WIDL_using_Windows_Graphics_Display */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformationStatics_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.Graphics.Display.AdvancedColorInfo
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x60000
+#ifndef RUNTIMECLASS_Windows_Graphics_Display_AdvancedColorInfo_DEFINED
+#define RUNTIMECLASS_Windows_Graphics_Display_AdvancedColorInfo_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Graphics_Display_AdvancedColorInfo[] = {'W','i','n','d','o','w','s','.','G','r','a','p','h','i','c','s','.','D','i','s','p','l','a','y','.','A','d','v','a','n','c','e','d','C','o','l','o','r','I','n','f','o',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Graphics_Display_AdvancedColorInfo[] = L"Windows.Graphics.Display.AdvancedColorInfo";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Graphics_Display_AdvancedColorInfo[] = {'W','i','n','d','o','w','s','.','G','r','a','p','h','i','c','s','.','D','i','s','p','l','a','y','.','A','d','v','a','n','c','e','d','C','o','l','o','r','I','n','f','o',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Graphics_Display_AdvancedColorInfo_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x60000 */
+
+/*
+ * Class Windows.Graphics.Display.DisplayInformation
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_Graphics_Display_DisplayInformation_DEFINED
+#define RUNTIMECLASS_Windows_Graphics_Display_DisplayInformation_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_Graphics_Display_DisplayInformation[] = {'W','i','n','d','o','w','s','.','G','r','a','p','h','i','c','s','.','D','i','s','p','l','a','y','.','D','i','s','p','l','a','y','I','n','f','o','r','m','a','t','i','o','n',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Graphics_Display_DisplayInformation[] = L"Windows.Graphics.Display.DisplayInformation";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Graphics_Display_DisplayInformation[] = {'W','i','n','d','o','w','s','.','G','r','a','p','h','i','c','s','.','D','i','s','p','l','a','y','.','D','i','s','p','l','a','y','I','n','f','o','r','m','a','t','i','o','n',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_Graphics_Display_DisplayInformation_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::Graphics::Display::DisplayInformation*,IInspectable* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable, 0x86c4f619, 0x67b6, 0x51c7, 0xb3,0x0d, 0xd8,0xcf,0x13,0x62,0x53,0x27);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("86c4f619-67b6-51c7-b30d-d8cf13625327")
+            ITypedEventHandler<ABI::Windows::Graphics::Display::DisplayInformation*,IInspectable* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Graphics::Display::DisplayInformation*, ABI::Windows::Graphics::Display::IDisplayInformation* >, IInspectable* >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable, 0x86c4f619, 0x67b6, 0x51c7, 0xb3,0x0d, 0xd8,0xcf,0x13,0x62,0x53,0x27)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectableVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable *This);
+
+    /*** ITypedEventHandler<ABI::Windows::Graphics::Display::DisplayInformation*,IInspectable* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable *This,
+        __x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *sender,
+        IInspectable *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectableVtbl;
+
+interface __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::Graphics::Display::DisplayInformation*,IInspectable* > methods ***/
+#define __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable_QueryInterface(__FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable_AddRef(__FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable_Release(__FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::Graphics::Display::DisplayInformation*,IInspectable* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable_Invoke(__FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable* This,__x_ABI_CWindows_CGraphics_CDisplay_CIDisplayInformation *sender,IInspectable *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_DisplayInformation_IInspectable IID___FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable
+#define ITypedEventHandler_DisplayInformation_IInspectableVtbl __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectableVtbl
+#define ITypedEventHandler_DisplayInformation_IInspectable __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable
+#define ITypedEventHandler_DisplayInformation_IInspectable_QueryInterface __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable_QueryInterface
+#define ITypedEventHandler_DisplayInformation_IInspectable_AddRef __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable_AddRef
+#define ITypedEventHandler_DisplayInformation_IInspectable_Release __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable_Release
+#define ITypedEventHandler_DisplayInformation_IInspectable_Invoke __FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __windows_graphics_display_h__ */
diff --git a/mingw-w64-headers/include/windows.graphics.effects.h b/mingw-w64-headers/include/windows.graphics.effects.h
index 59b8be9..53b4691 100644
--- a/mingw-w64-headers/include/windows.graphics.effects.h
+++ b/mingw-w64-headers/include/windows.graphics.effects.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.graphics.effects.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.graphics.effects.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.h b/mingw-w64-headers/include/windows.graphics.h
index 9778dbb..9492558 100644
--- a/mingw-w64-headers/include/windows.graphics.h
+++ b/mingw-w64-headers/include/windows.graphics.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.graphics.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.graphics.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.holographic.h b/mingw-w64-headers/include/windows.graphics.holographic.h
index fec9b80..ddec6ad 100644
--- a/mingw-w64-headers/include/windows.graphics.holographic.h
+++ b/mingw-w64-headers/include/windows.graphics.holographic.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.graphics.holographic.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.graphics.holographic.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.graphics.imaging.h b/mingw-w64-headers/include/windows.graphics.imaging.h
index 7ed0367..02bff6e 100644
--- a/mingw-w64-headers/include/windows.graphics.imaging.h
+++ b/mingw-w64-headers/include/windows.graphics.imaging.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.graphics.imaging.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.graphics.imaging.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.management.deployment.h b/mingw-w64-headers/include/windows.management.deployment.h
index 2d42e7b..5717f35 100644
--- a/mingw-w64-headers/include/windows.management.deployment.h
+++ b/mingw-w64-headers/include/windows.management.deployment.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.management.deployment.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.management.deployment.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.capture.h b/mingw-w64-headers/include/windows.media.capture.h
index 8950624..beb2022 100644
--- a/mingw-w64-headers/include/windows.media.capture.h
+++ b/mingw-w64-headers/include/windows.media.capture.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.media.capture.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.media.capture.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.closedcaptioning.h b/mingw-w64-headers/include/windows.media.closedcaptioning.h
index 9e6018a..396dd64 100644
--- a/mingw-w64-headers/include/windows.media.closedcaptioning.h
+++ b/mingw-w64-headers/include/windows.media.closedcaptioning.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.media.closedcaptioning.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.media.closedcaptioning.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.core.h b/mingw-w64-headers/include/windows.media.core.h
index 65cfd9e..c73b9df 100644
--- a/mingw-w64-headers/include/windows.media.core.h
+++ b/mingw-w64-headers/include/windows.media.core.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.media.core.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.media.core.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.devices.h b/mingw-w64-headers/include/windows.media.devices.h
index 2774b47..7851434 100644
--- a/mingw-w64-headers/include/windows.media.devices.h
+++ b/mingw-w64-headers/include/windows.media.devices.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.media.devices.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.media.devices.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.effects.h b/mingw-w64-headers/include/windows.media.effects.h
index 11a196f..582f4ec 100644
--- a/mingw-w64-headers/include/windows.media.effects.h
+++ b/mingw-w64-headers/include/windows.media.effects.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.media.effects.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.media.effects.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.faceanalysis.h b/mingw-w64-headers/include/windows.media.faceanalysis.h
index 2913aa4..d4387cd 100644
--- a/mingw-w64-headers/include/windows.media.faceanalysis.h
+++ b/mingw-w64-headers/include/windows.media.faceanalysis.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.media.faceanalysis.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.media.faceanalysis.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.h b/mingw-w64-headers/include/windows.media.h
index 1b415b4..4a2fe83 100644
--- a/mingw-w64-headers/include/windows.media.h
+++ b/mingw-w64-headers/include/windows.media.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.media.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.media.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.mediaproperties.h b/mingw-w64-headers/include/windows.media.mediaproperties.h
index 56bca14..1ad837b 100644
--- a/mingw-w64-headers/include/windows.media.mediaproperties.h
+++ b/mingw-w64-headers/include/windows.media.mediaproperties.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.media.mediaproperties.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.media.mediaproperties.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.playback.h b/mingw-w64-headers/include/windows.media.playback.h
index 240d497..d97a875 100644
--- a/mingw-w64-headers/include/windows.media.playback.h
+++ b/mingw-w64-headers/include/windows.media.playback.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.media.playback.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.media.playback.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.render.h b/mingw-w64-headers/include/windows.media.render.h
index 099e7c1..9fd35a7 100644
--- a/mingw-w64-headers/include/windows.media.render.h
+++ b/mingw-w64-headers/include/windows.media.render.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.media.render.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.media.render.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.speechrecognition.h b/mingw-w64-headers/include/windows.media.speechrecognition.h
index 0bd28d1..ae0694c 100644
--- a/mingw-w64-headers/include/windows.media.speechrecognition.h
+++ b/mingw-w64-headers/include/windows.media.speechrecognition.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.media.speechrecognition.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.media.speechrecognition.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.speechsynthesis.h b/mingw-w64-headers/include/windows.media.speechsynthesis.h
index 30ea811..ee659ae 100644
--- a/mingw-w64-headers/include/windows.media.speechsynthesis.h
+++ b/mingw-w64-headers/include/windows.media.speechsynthesis.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.media.speechsynthesis.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.media.speechsynthesis.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.media.transcoding.h b/mingw-w64-headers/include/windows.media.transcoding.h
index 374bd23..89afc7e 100644
--- a/mingw-w64-headers/include/windows.media.transcoding.h
+++ b/mingw-w64-headers/include/windows.media.transcoding.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.media.transcoding.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.media.transcoding.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.networking.connectivity.h b/mingw-w64-headers/include/windows.networking.connectivity.h
index c3fbae3..41d7695 100644
--- a/mingw-w64-headers/include/windows.networking.connectivity.h
+++ b/mingw-w64-headers/include/windows.networking.connectivity.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.networking.connectivity.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.networking.connectivity.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.networking.h b/mingw-w64-headers/include/windows.networking.h
index d108b8d..837d323 100644
--- a/mingw-w64-headers/include/windows.networking.h
+++ b/mingw-w64-headers/include/windows.networking.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.networking.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.networking.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.networking.sockets.h b/mingw-w64-headers/include/windows.networking.sockets.h
index b3c6ab7..5e21dd3 100644
--- a/mingw-w64-headers/include/windows.networking.sockets.h
+++ b/mingw-w64-headers/include/windows.networking.sockets.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.networking.sockets.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.networking.sockets.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.perception.h b/mingw-w64-headers/include/windows.perception.h
index 3ad9453..7533f55 100644
--- a/mingw-w64-headers/include/windows.perception.h
+++ b/mingw-w64-headers/include/windows.perception.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.perception.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.perception.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.perception.spatial.h b/mingw-w64-headers/include/windows.perception.spatial.h
index 101c143..0ac49c3 100644
--- a/mingw-w64-headers/include/windows.perception.spatial.h
+++ b/mingw-w64-headers/include/windows.perception.spatial.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.perception.spatial.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.perception.spatial.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.perception.spatial.surfaces.h b/mingw-w64-headers/include/windows.perception.spatial.surfaces.h
index a9a329b..245c9b8 100644
--- a/mingw-w64-headers/include/windows.perception.spatial.surfaces.h
+++ b/mingw-w64-headers/include/windows.perception.spatial.surfaces.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.perception.spatial.surfaces.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.perception.spatial.surfaces.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.authentication.onlineid.h b/mingw-w64-headers/include/windows.security.authentication.onlineid.h
index fd72768..a0716b2 100644
--- a/mingw-w64-headers/include/windows.security.authentication.onlineid.h
+++ b/mingw-w64-headers/include/windows.security.authentication.onlineid.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.security.authentication.onlineid.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.security.authentication.onlineid.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.authorization.appcapabilityaccess.h b/mingw-w64-headers/include/windows.security.authorization.appcapabilityaccess.h
index a0e4bb3..2c30fa9 100644
--- a/mingw-w64-headers/include/windows.security.authorization.appcapabilityaccess.h
+++ b/mingw-w64-headers/include/windows.security.authorization.appcapabilityaccess.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.security.authorization.appcapabilityaccess.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.security.authorization.appcapabilityaccess.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.credentials.h b/mingw-w64-headers/include/windows.security.credentials.h
index 2afeb7f..919f34a 100644
--- a/mingw-w64-headers/include/windows.security.credentials.h
+++ b/mingw-w64-headers/include/windows.security.credentials.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.security.credentials.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.security.credentials.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.credentials.ui.h b/mingw-w64-headers/include/windows.security.credentials.ui.h
index fec63e5..e02c996 100644
--- a/mingw-w64-headers/include/windows.security.credentials.ui.h
+++ b/mingw-w64-headers/include/windows.security.credentials.ui.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.security.credentials.ui.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.security.credentials.ui.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.cryptography.core.h b/mingw-w64-headers/include/windows.security.cryptography.core.h
index 5220354..d6e0c6e 100644
--- a/mingw-w64-headers/include/windows.security.cryptography.core.h
+++ b/mingw-w64-headers/include/windows.security.cryptography.core.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.security.cryptography.core.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.security.cryptography.core.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.cryptography.h b/mingw-w64-headers/include/windows.security.cryptography.h
index cb25906..3e47587 100644
--- a/mingw-w64-headers/include/windows.security.cryptography.h
+++ b/mingw-w64-headers/include/windows.security.cryptography.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.security.cryptography.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.security.cryptography.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.enterprisedata.h b/mingw-w64-headers/include/windows.security.enterprisedata.h
index 4694fe0..c578cba 100644
--- a/mingw-w64-headers/include/windows.security.enterprisedata.h
+++ b/mingw-w64-headers/include/windows.security.enterprisedata.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.security.enterprisedata.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.security.enterprisedata.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.exchangeactivesyncprovisioning.h b/mingw-w64-headers/include/windows.security.exchangeactivesyncprovisioning.h
index 7f69917..9cd3641 100644
--- a/mingw-w64-headers/include/windows.security.exchangeactivesyncprovisioning.h
+++ b/mingw-w64-headers/include/windows.security.exchangeactivesyncprovisioning.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.security.exchangeactivesyncprovisioning.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.security.exchangeactivesyncprovisioning.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.security.isolation.h b/mingw-w64-headers/include/windows.security.isolation.h
index 42570c9..000d16e 100644
--- a/mingw-w64-headers/include/windows.security.isolation.h
+++ b/mingw-w64-headers/include/windows.security.isolation.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.security.isolation.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.security.isolation.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.storage.fileproperties.h b/mingw-w64-headers/include/windows.storage.fileproperties.h
index 98b9a3d..68c509e 100644
--- a/mingw-w64-headers/include/windows.storage.fileproperties.h
+++ b/mingw-w64-headers/include/windows.storage.fileproperties.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.storage.fileproperties.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.storage.fileproperties.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.storage.h b/mingw-w64-headers/include/windows.storage.h
index d3a802c..2745629 100644
--- a/mingw-w64-headers/include/windows.storage.h
+++ b/mingw-w64-headers/include/windows.storage.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.storage.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.storage.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.storage.search.h b/mingw-w64-headers/include/windows.storage.search.h
index 4b1459a..849b75e 100644
--- a/mingw-w64-headers/include/windows.storage.search.h
+++ b/mingw-w64-headers/include/windows.storage.search.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.storage.search.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.storage.search.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.storage.streams.h b/mingw-w64-headers/include/windows.storage.streams.h
index 8293368..0e4aaaa 100644
--- a/mingw-w64-headers/include/windows.storage.streams.h
+++ b/mingw-w64-headers/include/windows.storage.streams.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.storage.streams.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.storage.streams.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.system.h b/mingw-w64-headers/include/windows.system.h
index 63ae788..f969fcd 100644
--- a/mingw-w64-headers/include/windows.system.h
+++ b/mingw-w64-headers/include/windows.system.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.system.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.system.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.system.power.h b/mingw-w64-headers/include/windows.system.power.h
index dac72a2..5d11c1e 100644
--- a/mingw-w64-headers/include/windows.system.power.h
+++ b/mingw-w64-headers/include/windows.system.power.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.system.power.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.system.power.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.system.profile.h b/mingw-w64-headers/include/windows.system.profile.h
index 7e28152..67cb934 100644
--- a/mingw-w64-headers/include/windows.system.profile.h
+++ b/mingw-w64-headers/include/windows.system.profile.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.system.profile.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.system.profile.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.system.profile.systemmanufacturers.h b/mingw-w64-headers/include/windows.system.profile.systemmanufacturers.h
index f683d23..2b6cbb2 100644
--- a/mingw-w64-headers/include/windows.system.profile.systemmanufacturers.h
+++ b/mingw-w64-headers/include/windows.system.profile.systemmanufacturers.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.system.profile.systemmanufacturers.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.system.profile.systemmanufacturers.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.system.threading.h b/mingw-w64-headers/include/windows.system.threading.h
index 403f459..1d43ef6 100644
--- a/mingw-w64-headers/include/windows.system.threading.h
+++ b/mingw-w64-headers/include/windows.system.threading.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.system.threading.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.system.threading.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.system.userprofile.h b/mingw-w64-headers/include/windows.system.userprofile.h
index 7a7f144..c5dcba3 100644
--- a/mingw-w64-headers/include/windows.system.userprofile.h
+++ b/mingw-w64-headers/include/windows.system.userprofile.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.system.userprofile.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.system.userprofile.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.composition.h b/mingw-w64-headers/include/windows.ui.composition.h
index 95f2a83..1011432 100644
--- a/mingw-w64-headers/include/windows.ui.composition.h
+++ b/mingw-w64-headers/include/windows.ui.composition.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.ui.composition.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.ui.composition.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.composition.interop.h b/mingw-w64-headers/include/windows.ui.composition.interop.h
index 0324075..e677a63 100644
--- a/mingw-w64-headers/include/windows.ui.composition.interop.h
+++ b/mingw-w64-headers/include/windows.ui.composition.interop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.ui.composition.interop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.ui.composition.interop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.core.h b/mingw-w64-headers/include/windows.ui.core.h
index 9f1302b..8f4d473 100644
--- a/mingw-w64-headers/include/windows.ui.core.h
+++ b/mingw-w64-headers/include/windows.ui.core.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.ui.core.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.ui.core.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.h b/mingw-w64-headers/include/windows.ui.h
index 4677102..2de91b1 100644
--- a/mingw-w64-headers/include/windows.ui.h
+++ b/mingw-w64-headers/include/windows.ui.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.ui.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.ui.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.input.h b/mingw-w64-headers/include/windows.ui.input.h
index ff688b9..d78b1ac 100644
--- a/mingw-w64-headers/include/windows.ui.input.h
+++ b/mingw-w64-headers/include/windows.ui.input.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.ui.input.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.ui.input.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.notifications.h b/mingw-w64-headers/include/windows.ui.notifications.h
index a7de1fe..dbaf907 100644
--- a/mingw-w64-headers/include/windows.ui.notifications.h
+++ b/mingw-w64-headers/include/windows.ui.notifications.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.ui.notifications.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.ui.notifications.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.text.core.h b/mingw-w64-headers/include/windows.ui.text.core.h
new file mode 100644
index 0000000..af6bfc0
--- /dev/null
+++ b/mingw-w64-headers/include/windows.ui.text.core.h
@@ -0,0 +1,5689 @@
+/*** Autogenerated by WIDL 11.5 from include/windows.ui.text.core.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 __windows_ui_text_core_h__
+#define __windows_ui_text_core_h__
+
+/* Forward declarations */
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics ABI::Windows::UI::Text::Core::ICoreTextServicesManagerStatics
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextServicesManagerStatics;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment ABI::Windows::UI::Text::Core::ICoreTextCompositionSegment
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextCompositionSegment;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs ABI::Windows::UI::Text::Core::ICoreTextCompositionCompletedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextCompositionCompletedEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs ABI::Windows::UI::Text::Core::ICoreTextCompositionStartedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextCompositionStartedEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs ABI::Windows::UI::Text::Core::ICoreTextFormatUpdatingEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextFormatUpdatingEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs ABI::Windows::UI::Text::Core::ICoreTextSelectionUpdatingEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextSelectionUpdatingEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs ABI::Windows::UI::Text::Core::ICoreTextTextUpdatingEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextTextUpdatingEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds ABI::Windows::UI::Text::Core::ICoreTextLayoutBounds
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextLayoutBounds;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest ABI::Windows::UI::Text::Core::ICoreTextLayoutRequest
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextLayoutRequest;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs ABI::Windows::UI::Text::Core::ICoreTextLayoutRequestedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextLayoutRequestedEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest ABI::Windows::UI::Text::Core::ICoreTextSelectionRequest
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextSelectionRequest;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs ABI::Windows::UI::Text::Core::ICoreTextSelectionRequestedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextSelectionRequestedEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest ABI::Windows::UI::Text::Core::ICoreTextTextRequest
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextTextRequest;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs ABI::Windows::UI::Text::Core::ICoreTextTextRequestedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextTextRequestedEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext ABI::Windows::UI::Text::Core::ICoreTextEditContext
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextEditContext;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager ABI::Windows::UI::Text::Core::ICoreTextServicesManager
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextServicesManager;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextServicesManager_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextServicesManager_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    class CoreTextServicesManager;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CCoreTextServicesManager __x_ABI_CWindows_CUI_CText_CCore_CCoreTextServicesManager;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextServicesManager_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingEventArgs_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    class CoreTextFormatUpdatingEventArgs;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingEventArgs __x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingEventArgs;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingEventArgs_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextEditContext_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextEditContext_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    class CoreTextEditContext;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CCoreTextEditContext __x_ABI_CWindows_CUI_CText_CCore_CCoreTextEditContext;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextEditContext_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextCompositionCompletedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextCompositionCompletedEventArgs_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    class CoreTextCompositionCompletedEventArgs;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CCoreTextCompositionCompletedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CCoreTextCompositionCompletedEventArgs;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextCompositionCompletedEventArgs_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextCompositionStartedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextCompositionStartedEventArgs_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    class CoreTextCompositionStartedEventArgs;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CCoreTextCompositionStartedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CCoreTextCompositionStartedEventArgs;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextCompositionStartedEventArgs_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextLayoutRequestedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextLayoutRequestedEventArgs_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    class CoreTextLayoutRequestedEventArgs;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CCoreTextLayoutRequestedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CCoreTextLayoutRequestedEventArgs;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextLayoutRequestedEventArgs_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionRequestedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionRequestedEventArgs_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    class CoreTextSelectionRequestedEventArgs;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionRequestedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionRequestedEventArgs;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionRequestedEventArgs_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionUpdatingEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionUpdatingEventArgs_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    class CoreTextSelectionUpdatingEventArgs;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionUpdatingEventArgs __x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionUpdatingEventArgs;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionUpdatingEventArgs_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextRequestedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextRequestedEventArgs_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    class CoreTextTextRequestedEventArgs;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextRequestedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextRequestedEventArgs;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextRequestedEventArgs_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextUpdatingEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextUpdatingEventArgs_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    class CoreTextTextUpdatingEventArgs;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextUpdatingEventArgs __x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextUpdatingEventArgs;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextUpdatingEventArgs_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextLayoutBounds_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextLayoutBounds_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    class CoreTextLayoutBounds;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CCoreTextLayoutBounds __x_ABI_CWindows_CUI_CText_CCore_CCoreTextLayoutBounds;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextLayoutBounds_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextLayoutRequest_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextLayoutRequest_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    class CoreTextLayoutRequest;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CCoreTextLayoutRequest __x_ABI_CWindows_CUI_CText_CCore_CCoreTextLayoutRequest;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextLayoutRequest_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionRequest_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionRequest_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    class CoreTextSelectionRequest;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionRequest __x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionRequest;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionRequest_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextRequest_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextRequest_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    class CoreTextTextRequest;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextRequest __x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextRequest;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextRequest_FWD_DEFINED__ */
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextCompositionSegment_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextCompositionSegment_FWD_DEFINED__
+#ifdef __cplusplus
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    class CoreTextCompositionSegment;
+                }
+            }
+        }
+    }
+}
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CCoreTextCompositionSegment __x_ABI_CWindows_CUI_CText_CCore_CCoreTextCompositionSegment;
+#endif /* defined __cplusplus */
+#endif /* defined ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextCompositionSegment_FWD_DEFINED__ */
+
+#ifndef ____FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_FWD_DEFINED__
+#define ____FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_FWD_DEFINED__
+typedef interface __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment;
+#ifdef __cplusplus
+#define __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::UI::Text::Core::CoreTextCompositionSegment* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,IInspectable* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextCompositionCompletedEventArgs* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextCompositionStartedEventArgs* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextFormatUpdatingEventArgs* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextLayoutRequestedEventArgs* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextSelectionRequestedEventArgs* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextSelectionUpdatingEventArgs* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextTextRequestedEventArgs* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextTextUpdatingEventArgs* >
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable_FWD_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable_FWD_DEFINED__
+typedef interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable;
+#ifdef __cplusplus
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextServicesManager*,IInspectable* >
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
+
+#include <inspectable.h>
+#include <asyncinfo.h>
+#include <eventtoken.h>
+#include <windowscontracts.h>
+#include <windows.foundation.h>
+#include <windows.globalization.h>
+#include <windows.ui.viewmanagement.h>
+#include <windows.ui.text.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs ABI::Windows::UI::Text::Core::ICoreTextCompositionCompletedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextCompositionCompletedEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment ABI::Windows::UI::Text::Core::ICoreTextCompositionSegment
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextCompositionSegment;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs ABI::Windows::UI::Text::Core::ICoreTextCompositionStartedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextCompositionStartedEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext ABI::Windows::UI::Text::Core::ICoreTextEditContext
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextEditContext;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs ABI::Windows::UI::Text::Core::ICoreTextFormatUpdatingEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextFormatUpdatingEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds ABI::Windows::UI::Text::Core::ICoreTextLayoutBounds
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextLayoutBounds;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest ABI::Windows::UI::Text::Core::ICoreTextLayoutRequest
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextLayoutRequest;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs ABI::Windows::UI::Text::Core::ICoreTextLayoutRequestedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextLayoutRequestedEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest ABI::Windows::UI::Text::Core::ICoreTextSelectionRequest
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextSelectionRequest;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs ABI::Windows::UI::Text::Core::ICoreTextSelectionRequestedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextSelectionRequestedEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs ABI::Windows::UI::Text::Core::ICoreTextSelectionUpdatingEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextSelectionUpdatingEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager ABI::Windows::UI::Text::Core::ICoreTextServicesManager
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextServicesManager;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics ABI::Windows::UI::Text::Core::ICoreTextServicesManagerStatics
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextServicesManagerStatics;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest ABI::Windows::UI::Text::Core::ICoreTextTextRequest
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextTextRequest;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs ABI::Windows::UI::Text::Core::ICoreTextTextRequestedEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextTextRequestedEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_FWD_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_FWD_DEFINED__
+typedef interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs;
+#ifdef __cplusplus
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs ABI::Windows::UI::Text::Core::ICoreTextTextUpdatingEventArgs
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    interface ICoreTextTextUpdatingEventArgs;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+#endif
+
+#if !defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+#define WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION 0xe0000
+#endif // defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingReason_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingReason_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    enum CoreTextFormatUpdatingReason {
+                        CoreTextFormatUpdatingReason_None = 0,
+                        CoreTextFormatUpdatingReason_CompositionUnconverted = 1,
+                        CoreTextFormatUpdatingReason_CompositionConverted = 2,
+                        CoreTextFormatUpdatingReason_CompositionTargetUnconverted = 3,
+                        CoreTextFormatUpdatingReason_CompositionTargetConverted = 4
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingReason {
+    CoreTextFormatUpdatingReason_None = 0,
+    CoreTextFormatUpdatingReason_CompositionUnconverted = 1,
+    CoreTextFormatUpdatingReason_CompositionConverted = 2,
+    CoreTextFormatUpdatingReason_CompositionTargetUnconverted = 3,
+    CoreTextFormatUpdatingReason_CompositionTargetConverted = 4
+};
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define CoreTextFormatUpdatingReason __x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingReason
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif /* ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingReason_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingReason __x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingReason;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingResult_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingResult_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    enum CoreTextFormatUpdatingResult {
+                        CoreTextFormatUpdatingResult_Succeeded = 0,
+                        CoreTextFormatUpdatingResult_Failed = 1
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingResult {
+    CoreTextFormatUpdatingResult_Succeeded = 0,
+    CoreTextFormatUpdatingResult_Failed = 1
+};
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define CoreTextFormatUpdatingResult __x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingResult
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif /* ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingResult_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingResult __x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingResult;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputPaneDisplayPolicy_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputPaneDisplayPolicy_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    enum CoreTextInputPaneDisplayPolicy {
+                        CoreTextInputPaneDisplayPolicy_Automatic = 0,
+                        CoreTextInputPaneDisplayPolicy_Manual = 1
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputPaneDisplayPolicy {
+    CoreTextInputPaneDisplayPolicy_Automatic = 0,
+    CoreTextInputPaneDisplayPolicy_Manual = 1
+};
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define CoreTextInputPaneDisplayPolicy __x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputPaneDisplayPolicy
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif /* ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputPaneDisplayPolicy_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputPaneDisplayPolicy __x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputPaneDisplayPolicy;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputScope_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputScope_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    enum CoreTextInputScope {
+                        CoreTextInputScope_Default = 0,
+                        CoreTextInputScope_Url = 1,
+                        CoreTextInputScope_FilePath = 2,
+                        CoreTextInputScope_FileName = 3,
+                        CoreTextInputScope_EmailUserName = 4,
+                        CoreTextInputScope_EmailAddress = 5,
+                        CoreTextInputScope_UserName = 6,
+                        CoreTextInputScope_PersonalFullName = 7,
+                        CoreTextInputScope_PersonalNamePrefix = 8,
+                        CoreTextInputScope_PersonalGivenName = 9,
+                        CoreTextInputScope_PersonalMiddleName = 10,
+                        CoreTextInputScope_PersonalSurname = 11,
+                        CoreTextInputScope_PersonalNameSuffix = 12,
+                        CoreTextInputScope_Address = 13,
+                        CoreTextInputScope_AddressPostalCode = 14,
+                        CoreTextInputScope_AddressStreet = 15,
+                        CoreTextInputScope_AddressStateOrProvince = 16,
+                        CoreTextInputScope_AddressCity = 17,
+                        CoreTextInputScope_AddressCountryName = 18,
+                        CoreTextInputScope_AddressCountryShortName = 19,
+                        CoreTextInputScope_CurrencyAmountAndSymbol = 20,
+                        CoreTextInputScope_CurrencyAmount = 21,
+                        CoreTextInputScope_Date = 22,
+                        CoreTextInputScope_DateMonth = 23,
+                        CoreTextInputScope_DateDay = 24,
+                        CoreTextInputScope_DateYear = 25,
+                        CoreTextInputScope_DateMonthName = 26,
+                        CoreTextInputScope_DateDayName = 27,
+                        CoreTextInputScope_Number = 29,
+                        CoreTextInputScope_SingleCharacter = 30,
+                        CoreTextInputScope_Password = 31,
+                        CoreTextInputScope_TelephoneNumber = 32,
+                        CoreTextInputScope_TelephoneCountryCode = 33,
+                        CoreTextInputScope_TelephoneAreaCode = 34,
+                        CoreTextInputScope_TelephoneLocalNumber = 35,
+                        CoreTextInputScope_Time = 36,
+                        CoreTextInputScope_TimeHour = 37,
+                        CoreTextInputScope_TimeMinuteOrSecond = 38,
+                        CoreTextInputScope_NumberFullWidth = 39,
+                        CoreTextInputScope_AlphanumericHalfWidth = 40,
+                        CoreTextInputScope_AlphanumericFullWidth = 41,
+                        CoreTextInputScope_CurrencyChinese = 42,
+                        CoreTextInputScope_Bopomofo = 43,
+                        CoreTextInputScope_Hiragana = 44,
+                        CoreTextInputScope_KatakanaHalfWidth = 45,
+                        CoreTextInputScope_KatakanaFullWidth = 46,
+                        CoreTextInputScope_Hanja = 47,
+                        CoreTextInputScope_HangulHalfWidth = 48,
+                        CoreTextInputScope_HangulFullWidth = 49,
+                        CoreTextInputScope_Search = 50,
+                        CoreTextInputScope_Formula = 51,
+                        CoreTextInputScope_SearchIncremental = 52,
+                        CoreTextInputScope_ChineseHalfWidth = 53,
+                        CoreTextInputScope_ChineseFullWidth = 54,
+                        CoreTextInputScope_NativeScript = 55,
+                        CoreTextInputScope_Text = 57,
+                        CoreTextInputScope_Chat = 58,
+                        CoreTextInputScope_NameOrPhoneNumber = 59,
+                        CoreTextInputScope_EmailUserNameOrAddress = 60,
+                        CoreTextInputScope_Private = 61,
+                        CoreTextInputScope_Maps = 62,
+                        CoreTextInputScope_PasswordNumeric = 63,
+                        CoreTextInputScope_FormulaNumber = 67
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputScope {
+    CoreTextInputScope_Default = 0,
+    CoreTextInputScope_Url = 1,
+    CoreTextInputScope_FilePath = 2,
+    CoreTextInputScope_FileName = 3,
+    CoreTextInputScope_EmailUserName = 4,
+    CoreTextInputScope_EmailAddress = 5,
+    CoreTextInputScope_UserName = 6,
+    CoreTextInputScope_PersonalFullName = 7,
+    CoreTextInputScope_PersonalNamePrefix = 8,
+    CoreTextInputScope_PersonalGivenName = 9,
+    CoreTextInputScope_PersonalMiddleName = 10,
+    CoreTextInputScope_PersonalSurname = 11,
+    CoreTextInputScope_PersonalNameSuffix = 12,
+    CoreTextInputScope_Address = 13,
+    CoreTextInputScope_AddressPostalCode = 14,
+    CoreTextInputScope_AddressStreet = 15,
+    CoreTextInputScope_AddressStateOrProvince = 16,
+    CoreTextInputScope_AddressCity = 17,
+    CoreTextInputScope_AddressCountryName = 18,
+    CoreTextInputScope_AddressCountryShortName = 19,
+    CoreTextInputScope_CurrencyAmountAndSymbol = 20,
+    CoreTextInputScope_CurrencyAmount = 21,
+    CoreTextInputScope_Date = 22,
+    CoreTextInputScope_DateMonth = 23,
+    CoreTextInputScope_DateDay = 24,
+    CoreTextInputScope_DateYear = 25,
+    CoreTextInputScope_DateMonthName = 26,
+    CoreTextInputScope_DateDayName = 27,
+    CoreTextInputScope_Number = 29,
+    CoreTextInputScope_SingleCharacter = 30,
+    CoreTextInputScope_Password = 31,
+    CoreTextInputScope_TelephoneNumber = 32,
+    CoreTextInputScope_TelephoneCountryCode = 33,
+    CoreTextInputScope_TelephoneAreaCode = 34,
+    CoreTextInputScope_TelephoneLocalNumber = 35,
+    CoreTextInputScope_Time = 36,
+    CoreTextInputScope_TimeHour = 37,
+    CoreTextInputScope_TimeMinuteOrSecond = 38,
+    CoreTextInputScope_NumberFullWidth = 39,
+    CoreTextInputScope_AlphanumericHalfWidth = 40,
+    CoreTextInputScope_AlphanumericFullWidth = 41,
+    CoreTextInputScope_CurrencyChinese = 42,
+    CoreTextInputScope_Bopomofo = 43,
+    CoreTextInputScope_Hiragana = 44,
+    CoreTextInputScope_KatakanaHalfWidth = 45,
+    CoreTextInputScope_KatakanaFullWidth = 46,
+    CoreTextInputScope_Hanja = 47,
+    CoreTextInputScope_HangulHalfWidth = 48,
+    CoreTextInputScope_HangulFullWidth = 49,
+    CoreTextInputScope_Search = 50,
+    CoreTextInputScope_Formula = 51,
+    CoreTextInputScope_SearchIncremental = 52,
+    CoreTextInputScope_ChineseHalfWidth = 53,
+    CoreTextInputScope_ChineseFullWidth = 54,
+    CoreTextInputScope_NativeScript = 55,
+    CoreTextInputScope_Text = 57,
+    CoreTextInputScope_Chat = 58,
+    CoreTextInputScope_NameOrPhoneNumber = 59,
+    CoreTextInputScope_EmailUserNameOrAddress = 60,
+    CoreTextInputScope_Private = 61,
+    CoreTextInputScope_Maps = 62,
+    CoreTextInputScope_PasswordNumeric = 63,
+    CoreTextInputScope_FormulaNumber = 67
+};
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define CoreTextInputScope __x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputScope
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif /* ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputScope_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputScope __x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputScope;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionUpdatingResult_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionUpdatingResult_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    enum CoreTextSelectionUpdatingResult {
+                        CoreTextSelectionUpdatingResult_Succeeded = 0,
+                        CoreTextSelectionUpdatingResult_Failed = 1
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionUpdatingResult {
+    CoreTextSelectionUpdatingResult_Succeeded = 0,
+    CoreTextSelectionUpdatingResult_Failed = 1
+};
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define CoreTextSelectionUpdatingResult __x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionUpdatingResult
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif /* ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionUpdatingResult_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionUpdatingResult __x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionUpdatingResult;
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextUpdatingResult_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextUpdatingResult_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    enum CoreTextTextUpdatingResult {
+                        CoreTextTextUpdatingResult_Succeeded = 0,
+                        CoreTextTextUpdatingResult_Failed = 1
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextUpdatingResult {
+    CoreTextTextUpdatingResult_Succeeded = 0,
+    CoreTextTextUpdatingResult_Failed = 1
+};
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define CoreTextTextUpdatingResult __x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextUpdatingResult
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif /* ____x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextUpdatingResult_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextUpdatingResult __x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextUpdatingResult;
+#endif /* __cplusplus */
+
+#ifndef __cplusplus
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange __x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange;
+#else /* __cplusplus */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    typedef struct CoreTextRange CoreTextRange;
+                }
+            }
+        }
+    }
+}
+#endif /* __cplusplus */
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    struct CoreTextRange {
+                        INT32 StartCaretPosition;
+                        INT32 EndCaretPosition;
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#else
+struct __x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange {
+    INT32 StartCaretPosition;
+    INT32 EndCaretPosition;
+};
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define CoreTextRange __x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef ____FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_FWD_DEFINED__
+#define ____FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_FWD_DEFINED__
+typedef interface __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment;
+#ifdef __cplusplus
+#define __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::UI::Text::Core::CoreTextCompositionSegment* >
+#endif /* __cplusplus */
+#endif
+
+/*****************************************************************************
+ * ICoreTextServicesManagerStatics interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics, 0x1520a388, 0xe2cf, 0x4d65, 0xae,0xb9, 0xb3,0x2d,0x86,0xfe,0x39,0xb9);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    MIDL_INTERFACE("1520a388-e2cf-4d65-aeb9-b32d86fe39b9")
+                    ICoreTextServicesManagerStatics : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE GetForCurrentView(
+                            ABI::Windows::UI::Text::Core::ICoreTextServicesManager **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics, 0x1520a388, 0xe2cf, 0x4d65, 0xae,0xb9, 0xb3,0x2d,0x86,0xfe,0x39,0xb9)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStaticsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics *This,
+        TrustLevel *trustLevel);
+
+    /*** ICoreTextServicesManagerStatics methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetForCurrentView)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStaticsVtbl;
+
+interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics {
+    CONST_VTBL __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStaticsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** ICoreTextServicesManagerStatics methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_GetForCurrentView(This,value) (This)->lpVtbl->GetForCurrentView(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_QueryInterface(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_AddRef(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_Release(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_GetIids(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_GetRuntimeClassName(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_GetTrustLevel(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** ICoreTextServicesManagerStatics methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_GetForCurrentView(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics* This,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager **value) {
+    return This->lpVtbl->GetForCurrentView(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define IID_ICoreTextServicesManagerStatics IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics
+#define ICoreTextServicesManagerStaticsVtbl __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStaticsVtbl
+#define ICoreTextServicesManagerStatics __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics
+#define ICoreTextServicesManagerStatics_QueryInterface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_QueryInterface
+#define ICoreTextServicesManagerStatics_AddRef __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_AddRef
+#define ICoreTextServicesManagerStatics_Release __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_Release
+#define ICoreTextServicesManagerStatics_GetIids __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_GetIids
+#define ICoreTextServicesManagerStatics_GetRuntimeClassName __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_GetRuntimeClassName
+#define ICoreTextServicesManagerStatics_GetTrustLevel __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_GetTrustLevel
+#define ICoreTextServicesManagerStatics_GetForCurrentView __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_GetForCurrentView
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerStatics_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * ICoreTextCompositionSegment interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment, 0x776c6bd9, 0x4ead, 0x4da7, 0x8f,0x47, 0x3a,0x88,0xb5,0x23,0xcc,0x34);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    MIDL_INTERFACE("776c6bd9-4ead-4da7-8f47-3a88b523cc34")
+                    ICoreTextCompositionSegment : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_PreconversionString(
+                            HSTRING *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_Range(
+                            ABI::Windows::UI::Text::Core::CoreTextRange *value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment, 0x776c6bd9, 0x4ead, 0x4da7, 0x8f,0x47, 0x3a,0x88,0xb5,0x23,0xcc,0x34)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegmentVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment *This,
+        TrustLevel *trustLevel);
+
+    /*** ICoreTextCompositionSegment methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_PreconversionString)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment *This,
+        HSTRING *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Range)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange *value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegmentVtbl;
+
+interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment {
+    CONST_VTBL __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegmentVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** ICoreTextCompositionSegment methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_get_PreconversionString(This,value) (This)->lpVtbl->get_PreconversionString(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_get_Range(This,value) (This)->lpVtbl->get_Range(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_QueryInterface(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_AddRef(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_Release(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_GetIids(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_GetRuntimeClassName(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_GetTrustLevel(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** ICoreTextCompositionSegment methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_get_PreconversionString(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment* This,HSTRING *value) {
+    return This->lpVtbl->get_PreconversionString(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_get_Range(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange *value) {
+    return This->lpVtbl->get_Range(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define IID_ICoreTextCompositionSegment IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment
+#define ICoreTextCompositionSegmentVtbl __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegmentVtbl
+#define ICoreTextCompositionSegment __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment
+#define ICoreTextCompositionSegment_QueryInterface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_QueryInterface
+#define ICoreTextCompositionSegment_AddRef __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_AddRef
+#define ICoreTextCompositionSegment_Release __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_Release
+#define ICoreTextCompositionSegment_GetIids __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_GetIids
+#define ICoreTextCompositionSegment_GetRuntimeClassName __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_GetRuntimeClassName
+#define ICoreTextCompositionSegment_GetTrustLevel __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_GetTrustLevel
+#define ICoreTextCompositionSegment_get_PreconversionString __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_get_PreconversionString
+#define ICoreTextCompositionSegment_get_Range __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_get_Range
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * ICoreTextCompositionCompletedEventArgs interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs, 0x1f34ebb6, 0xb79f, 0x4121, 0xa5,0xe7, 0xfd,0xa9,0xb8,0x61,0x6e,0x30);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    MIDL_INTERFACE("1f34ebb6-b79f-4121-a5e7-fda9b8616e30")
+                    ICoreTextCompositionCompletedEventArgs : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_IsCanceled(
+                            boolean *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_CompositionSegments(
+                            ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::UI::Text::Core::CoreTextCompositionSegment* > **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE GetDeferral(
+                            ABI::Windows::Foundation::IDeferral **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs, 0x1f34ebb6, 0xb79f, 0x4121, 0xa5,0xe7, 0xfd,0xa9,0xb8,0x61,0x6e,0x30)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs *This,
+        TrustLevel *trustLevel);
+
+    /*** ICoreTextCompositionCompletedEventArgs methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_IsCanceled)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_CompositionSegments)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs *This,
+        __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment **value);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeferral)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs *This,
+        __x_ABI_CWindows_CFoundation_CIDeferral **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgsVtbl;
+
+interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs {
+    CONST_VTBL __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** ICoreTextCompositionCompletedEventArgs methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_get_IsCanceled(This,value) (This)->lpVtbl->get_IsCanceled(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_get_CompositionSegments(This,value) (This)->lpVtbl->get_CompositionSegments(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_GetDeferral(This,value) (This)->lpVtbl->GetDeferral(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_QueryInterface(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_AddRef(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_Release(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_GetIids(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_GetRuntimeClassName(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_GetTrustLevel(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** ICoreTextCompositionCompletedEventArgs methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_get_IsCanceled(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs* This,boolean *value) {
+    return This->lpVtbl->get_IsCanceled(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_get_CompositionSegments(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs* This,__FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment **value) {
+    return This->lpVtbl->get_CompositionSegments(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_GetDeferral(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs* This,__x_ABI_CWindows_CFoundation_CIDeferral **value) {
+    return This->lpVtbl->GetDeferral(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define IID_ICoreTextCompositionCompletedEventArgs IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs
+#define ICoreTextCompositionCompletedEventArgsVtbl __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgsVtbl
+#define ICoreTextCompositionCompletedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs
+#define ICoreTextCompositionCompletedEventArgs_QueryInterface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_QueryInterface
+#define ICoreTextCompositionCompletedEventArgs_AddRef __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_AddRef
+#define ICoreTextCompositionCompletedEventArgs_Release __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_Release
+#define ICoreTextCompositionCompletedEventArgs_GetIids __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_GetIids
+#define ICoreTextCompositionCompletedEventArgs_GetRuntimeClassName __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_GetRuntimeClassName
+#define ICoreTextCompositionCompletedEventArgs_GetTrustLevel __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_GetTrustLevel
+#define ICoreTextCompositionCompletedEventArgs_get_IsCanceled __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_get_IsCanceled
+#define ICoreTextCompositionCompletedEventArgs_get_CompositionSegments __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_get_CompositionSegments
+#define ICoreTextCompositionCompletedEventArgs_GetDeferral __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_GetDeferral
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * ICoreTextCompositionStartedEventArgs interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs, 0x276b16a9, 0x64e7, 0x4ab0, 0xbc,0x4b, 0xa0,0x2d,0x73,0x83,0x5b,0xfb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    MIDL_INTERFACE("276b16a9-64e7-4ab0-bc4b-a02d73835bfb")
+                    ICoreTextCompositionStartedEventArgs : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_IsCanceled(
+                            boolean *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE GetDeferral(
+                            ABI::Windows::Foundation::IDeferral **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs, 0x276b16a9, 0x64e7, 0x4ab0, 0xbc,0x4b, 0xa0,0x2d,0x73,0x83,0x5b,0xfb)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs *This,
+        TrustLevel *trustLevel);
+
+    /*** ICoreTextCompositionStartedEventArgs methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_IsCanceled)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeferral)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs *This,
+        __x_ABI_CWindows_CFoundation_CIDeferral **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgsVtbl;
+
+interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs {
+    CONST_VTBL __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** ICoreTextCompositionStartedEventArgs methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_get_IsCanceled(This,value) (This)->lpVtbl->get_IsCanceled(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_GetDeferral(This,value) (This)->lpVtbl->GetDeferral(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_QueryInterface(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_AddRef(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_Release(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_GetIids(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_GetRuntimeClassName(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_GetTrustLevel(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** ICoreTextCompositionStartedEventArgs methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_get_IsCanceled(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs* This,boolean *value) {
+    return This->lpVtbl->get_IsCanceled(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_GetDeferral(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs* This,__x_ABI_CWindows_CFoundation_CIDeferral **value) {
+    return This->lpVtbl->GetDeferral(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define IID_ICoreTextCompositionStartedEventArgs IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs
+#define ICoreTextCompositionStartedEventArgsVtbl __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgsVtbl
+#define ICoreTextCompositionStartedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs
+#define ICoreTextCompositionStartedEventArgs_QueryInterface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_QueryInterface
+#define ICoreTextCompositionStartedEventArgs_AddRef __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_AddRef
+#define ICoreTextCompositionStartedEventArgs_Release __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_Release
+#define ICoreTextCompositionStartedEventArgs_GetIids __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_GetIids
+#define ICoreTextCompositionStartedEventArgs_GetRuntimeClassName __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_GetRuntimeClassName
+#define ICoreTextCompositionStartedEventArgs_GetTrustLevel __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_GetTrustLevel
+#define ICoreTextCompositionStartedEventArgs_get_IsCanceled __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_get_IsCanceled
+#define ICoreTextCompositionStartedEventArgs_GetDeferral __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_GetDeferral
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * ICoreTextFormatUpdatingEventArgs interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs, 0x7310bd33, 0xb4a8, 0x43b1, 0xb3,0x7b, 0x07,0x24,0xd4,0xac,0xa7,0xab);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    MIDL_INTERFACE("7310bd33-b4a8-43b1-b37b-0724d4aca7ab")
+                    ICoreTextFormatUpdatingEventArgs : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_Range(
+                            ABI::Windows::UI::Text::Core::CoreTextRange *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_TextColor(
+                            ABI::Windows::Foundation::IReference<ABI::Windows::UI::ViewManagement::UIElementType > **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_BackgroundColor(
+                            ABI::Windows::Foundation::IReference<ABI::Windows::UI::ViewManagement::UIElementType > **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_UnderlineColor(
+                            ABI::Windows::Foundation::IReference<ABI::Windows::UI::ViewManagement::UIElementType > **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_UnderlineType(
+                            ABI::Windows::Foundation::IReference<ABI::Windows::UI::Text::UnderlineType > **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_Reason(
+                            ABI::Windows::UI::Text::Core::CoreTextFormatUpdatingReason *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_Result(
+                            ABI::Windows::UI::Text::Core::CoreTextFormatUpdatingResult *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_Result(
+                            ABI::Windows::UI::Text::Core::CoreTextFormatUpdatingResult value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_IsCanceled(
+                            boolean *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE GetDeferral(
+                            ABI::Windows::Foundation::IDeferral **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs, 0x7310bd33, 0xb4a8, 0x43b1, 0xb3,0x7b, 0x07,0x24,0xd4,0xac,0xa7,0xab)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs *This,
+        TrustLevel *trustLevel);
+
+    /*** ICoreTextFormatUpdatingEventArgs methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Range)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_TextColor)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs *This,
+        __FIReference_1_UIElementType **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_BackgroundColor)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs *This,
+        __FIReference_1_UIElementType **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_UnderlineColor)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs *This,
+        __FIReference_1_UIElementType **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_UnderlineType)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs *This,
+        __FIReference_1_UnderlineType **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Reason)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingReason *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Result)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingResult *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Result)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingResult value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsCanceled)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeferral)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs *This,
+        __x_ABI_CWindows_CFoundation_CIDeferral **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgsVtbl;
+
+interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs {
+    CONST_VTBL __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** ICoreTextFormatUpdatingEventArgs methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_Range(This,value) (This)->lpVtbl->get_Range(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_TextColor(This,value) (This)->lpVtbl->get_TextColor(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_BackgroundColor(This,value) (This)->lpVtbl->get_BackgroundColor(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_UnderlineColor(This,value) (This)->lpVtbl->get_UnderlineColor(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_UnderlineType(This,value) (This)->lpVtbl->get_UnderlineType(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_Reason(This,value) (This)->lpVtbl->get_Reason(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_Result(This,value) (This)->lpVtbl->get_Result(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_put_Result(This,value) (This)->lpVtbl->put_Result(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_IsCanceled(This,value) (This)->lpVtbl->get_IsCanceled(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_GetDeferral(This,value) (This)->lpVtbl->GetDeferral(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_QueryInterface(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_AddRef(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_Release(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_GetIids(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_GetRuntimeClassName(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_GetTrustLevel(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** ICoreTextFormatUpdatingEventArgs methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_Range(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange *value) {
+    return This->lpVtbl->get_Range(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_TextColor(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs* This,__FIReference_1_UIElementType **value) {
+    return This->lpVtbl->get_TextColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_BackgroundColor(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs* This,__FIReference_1_UIElementType **value) {
+    return This->lpVtbl->get_BackgroundColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_UnderlineColor(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs* This,__FIReference_1_UIElementType **value) {
+    return This->lpVtbl->get_UnderlineColor(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_UnderlineType(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs* This,__FIReference_1_UnderlineType **value) {
+    return This->lpVtbl->get_UnderlineType(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_Reason(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingReason *value) {
+    return This->lpVtbl->get_Reason(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_Result(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingResult *value) {
+    return This->lpVtbl->get_Result(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_put_Result(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextFormatUpdatingResult value) {
+    return This->lpVtbl->put_Result(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_IsCanceled(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs* This,boolean *value) {
+    return This->lpVtbl->get_IsCanceled(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_GetDeferral(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs* This,__x_ABI_CWindows_CFoundation_CIDeferral **value) {
+    return This->lpVtbl->GetDeferral(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define IID_ICoreTextFormatUpdatingEventArgs IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs
+#define ICoreTextFormatUpdatingEventArgsVtbl __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgsVtbl
+#define ICoreTextFormatUpdatingEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs
+#define ICoreTextFormatUpdatingEventArgs_QueryInterface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_QueryInterface
+#define ICoreTextFormatUpdatingEventArgs_AddRef __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_AddRef
+#define ICoreTextFormatUpdatingEventArgs_Release __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_Release
+#define ICoreTextFormatUpdatingEventArgs_GetIids __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_GetIids
+#define ICoreTextFormatUpdatingEventArgs_GetRuntimeClassName __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_GetRuntimeClassName
+#define ICoreTextFormatUpdatingEventArgs_GetTrustLevel __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_GetTrustLevel
+#define ICoreTextFormatUpdatingEventArgs_get_Range __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_Range
+#define ICoreTextFormatUpdatingEventArgs_get_TextColor __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_TextColor
+#define ICoreTextFormatUpdatingEventArgs_get_BackgroundColor __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_BackgroundColor
+#define ICoreTextFormatUpdatingEventArgs_get_UnderlineColor __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_UnderlineColor
+#define ICoreTextFormatUpdatingEventArgs_get_UnderlineType __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_UnderlineType
+#define ICoreTextFormatUpdatingEventArgs_get_Reason __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_Reason
+#define ICoreTextFormatUpdatingEventArgs_get_Result __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_Result
+#define ICoreTextFormatUpdatingEventArgs_put_Result __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_put_Result
+#define ICoreTextFormatUpdatingEventArgs_get_IsCanceled __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_get_IsCanceled
+#define ICoreTextFormatUpdatingEventArgs_GetDeferral __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_GetDeferral
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * ICoreTextSelectionUpdatingEventArgs interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs, 0xd445839f, 0xfe7f, 0x4bd5, 0x8a,0x26, 0x09,0x22,0xc1,0xb3,0xe6,0x39);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    MIDL_INTERFACE("d445839f-fe7f-4bd5-8a26-0922c1b3e639")
+                    ICoreTextSelectionUpdatingEventArgs : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_Selection(
+                            ABI::Windows::UI::Text::Core::CoreTextRange *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_Result(
+                            ABI::Windows::UI::Text::Core::CoreTextSelectionUpdatingResult *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_Result(
+                            ABI::Windows::UI::Text::Core::CoreTextSelectionUpdatingResult value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_IsCanceled(
+                            boolean *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE GetDeferral(
+                            ABI::Windows::Foundation::IDeferral **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs, 0xd445839f, 0xfe7f, 0x4bd5, 0x8a,0x26, 0x09,0x22,0xc1,0xb3,0xe6,0x39)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs *This,
+        TrustLevel *trustLevel);
+
+    /*** ICoreTextSelectionUpdatingEventArgs methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Selection)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Result)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionUpdatingResult *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Result)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionUpdatingResult value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsCanceled)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeferral)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs *This,
+        __x_ABI_CWindows_CFoundation_CIDeferral **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgsVtbl;
+
+interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs {
+    CONST_VTBL __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** ICoreTextSelectionUpdatingEventArgs methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_get_Selection(This,value) (This)->lpVtbl->get_Selection(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_get_Result(This,value) (This)->lpVtbl->get_Result(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_put_Result(This,value) (This)->lpVtbl->put_Result(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_get_IsCanceled(This,value) (This)->lpVtbl->get_IsCanceled(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_GetDeferral(This,value) (This)->lpVtbl->GetDeferral(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_QueryInterface(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_AddRef(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_Release(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_GetIids(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_GetRuntimeClassName(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_GetTrustLevel(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** ICoreTextSelectionUpdatingEventArgs methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_get_Selection(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange *value) {
+    return This->lpVtbl->get_Selection(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_get_Result(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionUpdatingResult *value) {
+    return This->lpVtbl->get_Result(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_put_Result(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextSelectionUpdatingResult value) {
+    return This->lpVtbl->put_Result(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_get_IsCanceled(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs* This,boolean *value) {
+    return This->lpVtbl->get_IsCanceled(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_GetDeferral(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs* This,__x_ABI_CWindows_CFoundation_CIDeferral **value) {
+    return This->lpVtbl->GetDeferral(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define IID_ICoreTextSelectionUpdatingEventArgs IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs
+#define ICoreTextSelectionUpdatingEventArgsVtbl __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgsVtbl
+#define ICoreTextSelectionUpdatingEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs
+#define ICoreTextSelectionUpdatingEventArgs_QueryInterface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_QueryInterface
+#define ICoreTextSelectionUpdatingEventArgs_AddRef __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_AddRef
+#define ICoreTextSelectionUpdatingEventArgs_Release __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_Release
+#define ICoreTextSelectionUpdatingEventArgs_GetIids __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_GetIids
+#define ICoreTextSelectionUpdatingEventArgs_GetRuntimeClassName __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_GetRuntimeClassName
+#define ICoreTextSelectionUpdatingEventArgs_GetTrustLevel __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_GetTrustLevel
+#define ICoreTextSelectionUpdatingEventArgs_get_Selection __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_get_Selection
+#define ICoreTextSelectionUpdatingEventArgs_get_Result __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_get_Result
+#define ICoreTextSelectionUpdatingEventArgs_put_Result __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_put_Result
+#define ICoreTextSelectionUpdatingEventArgs_get_IsCanceled __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_get_IsCanceled
+#define ICoreTextSelectionUpdatingEventArgs_GetDeferral __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_GetDeferral
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * ICoreTextTextUpdatingEventArgs interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs, 0xeea7918d, 0xcc2b, 0x4f03, 0x8f,0xf6, 0x02,0xfd,0x21,0x7d,0xb4,0x50);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    MIDL_INTERFACE("eea7918d-cc2b-4f03-8ff6-02fd217db450")
+                    ICoreTextTextUpdatingEventArgs : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_Range(
+                            ABI::Windows::UI::Text::Core::CoreTextRange *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_Text(
+                            HSTRING *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_NewSelection(
+                            ABI::Windows::UI::Text::Core::CoreTextRange *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_InputLanguage(
+                            ABI::Windows::Globalization::ILanguage **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_Result(
+                            ABI::Windows::UI::Text::Core::CoreTextTextUpdatingResult *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_Result(
+                            ABI::Windows::UI::Text::Core::CoreTextTextUpdatingResult value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_IsCanceled(
+                            boolean *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE GetDeferral(
+                            ABI::Windows::Foundation::IDeferral **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs, 0xeea7918d, 0xcc2b, 0x4f03, 0x8f,0xf6, 0x02,0xfd,0x21,0x7d,0xb4,0x50)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs *This,
+        TrustLevel *trustLevel);
+
+    /*** ICoreTextTextUpdatingEventArgs methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Range)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Text)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs *This,
+        HSTRING *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_NewSelection)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_InputLanguage)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs *This,
+        __x_ABI_CWindows_CGlobalization_CILanguage **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Result)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextUpdatingResult *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Result)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextUpdatingResult value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsCanceled)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeferral)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs *This,
+        __x_ABI_CWindows_CFoundation_CIDeferral **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgsVtbl;
+
+interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs {
+    CONST_VTBL __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** ICoreTextTextUpdatingEventArgs methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_get_Range(This,value) (This)->lpVtbl->get_Range(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_get_Text(This,value) (This)->lpVtbl->get_Text(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_get_NewSelection(This,value) (This)->lpVtbl->get_NewSelection(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_get_InputLanguage(This,value) (This)->lpVtbl->get_InputLanguage(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_get_Result(This,value) (This)->lpVtbl->get_Result(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_put_Result(This,value) (This)->lpVtbl->put_Result(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_get_IsCanceled(This,value) (This)->lpVtbl->get_IsCanceled(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_GetDeferral(This,value) (This)->lpVtbl->GetDeferral(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_QueryInterface(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_AddRef(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_Release(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_GetIids(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_GetRuntimeClassName(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_GetTrustLevel(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** ICoreTextTextUpdatingEventArgs methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_get_Range(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange *value) {
+    return This->lpVtbl->get_Range(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_get_Text(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs* This,HSTRING *value) {
+    return This->lpVtbl->get_Text(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_get_NewSelection(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange *value) {
+    return This->lpVtbl->get_NewSelection(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_get_InputLanguage(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs* This,__x_ABI_CWindows_CGlobalization_CILanguage **value) {
+    return This->lpVtbl->get_InputLanguage(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_get_Result(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextUpdatingResult *value) {
+    return This->lpVtbl->get_Result(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_put_Result(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextTextUpdatingResult value) {
+    return This->lpVtbl->put_Result(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_get_IsCanceled(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs* This,boolean *value) {
+    return This->lpVtbl->get_IsCanceled(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_GetDeferral(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs* This,__x_ABI_CWindows_CFoundation_CIDeferral **value) {
+    return This->lpVtbl->GetDeferral(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define IID_ICoreTextTextUpdatingEventArgs IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs
+#define ICoreTextTextUpdatingEventArgsVtbl __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgsVtbl
+#define ICoreTextTextUpdatingEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs
+#define ICoreTextTextUpdatingEventArgs_QueryInterface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_QueryInterface
+#define ICoreTextTextUpdatingEventArgs_AddRef __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_AddRef
+#define ICoreTextTextUpdatingEventArgs_Release __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_Release
+#define ICoreTextTextUpdatingEventArgs_GetIids __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_GetIids
+#define ICoreTextTextUpdatingEventArgs_GetRuntimeClassName __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_GetRuntimeClassName
+#define ICoreTextTextUpdatingEventArgs_GetTrustLevel __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_GetTrustLevel
+#define ICoreTextTextUpdatingEventArgs_get_Range __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_get_Range
+#define ICoreTextTextUpdatingEventArgs_get_Text __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_get_Text
+#define ICoreTextTextUpdatingEventArgs_get_NewSelection __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_get_NewSelection
+#define ICoreTextTextUpdatingEventArgs_get_InputLanguage __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_get_InputLanguage
+#define ICoreTextTextUpdatingEventArgs_get_Result __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_get_Result
+#define ICoreTextTextUpdatingEventArgs_put_Result __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_put_Result
+#define ICoreTextTextUpdatingEventArgs_get_IsCanceled __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_get_IsCanceled
+#define ICoreTextTextUpdatingEventArgs_GetDeferral __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_GetDeferral
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * ICoreTextLayoutBounds interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds, 0xe972c974, 0x4436, 0x4917, 0x80,0xd0, 0xa5,0x25,0xe4,0xca,0x67,0x80);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    MIDL_INTERFACE("e972c974-4436-4917-80d0-a525e4ca6780")
+                    ICoreTextLayoutBounds : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_TextBounds(
+                            ABI::Windows::Foundation::Rect *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_TextBounds(
+                            ABI::Windows::Foundation::Rect value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_ControlBounds(
+                            ABI::Windows::Foundation::Rect *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_ControlBounds(
+                            ABI::Windows::Foundation::Rect value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds, 0xe972c974, 0x4436, 0x4917, 0x80,0xd0, 0xa5,0x25,0xe4,0xca,0x67,0x80)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBoundsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds *This,
+        TrustLevel *trustLevel);
+
+    /*** ICoreTextLayoutBounds methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_TextBounds)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds *This,
+        __x_ABI_CWindows_CFoundation_CRect *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_TextBounds)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds *This,
+        __x_ABI_CWindows_CFoundation_CRect value);
+
+    HRESULT (STDMETHODCALLTYPE *get_ControlBounds)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds *This,
+        __x_ABI_CWindows_CFoundation_CRect *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_ControlBounds)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds *This,
+        __x_ABI_CWindows_CFoundation_CRect value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBoundsVtbl;
+
+interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds {
+    CONST_VTBL __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBoundsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** ICoreTextLayoutBounds methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_get_TextBounds(This,value) (This)->lpVtbl->get_TextBounds(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_put_TextBounds(This,value) (This)->lpVtbl->put_TextBounds(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_get_ControlBounds(This,value) (This)->lpVtbl->get_ControlBounds(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_put_ControlBounds(This,value) (This)->lpVtbl->put_ControlBounds(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_QueryInterface(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_AddRef(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_Release(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_GetIids(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_GetRuntimeClassName(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_GetTrustLevel(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** ICoreTextLayoutBounds methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_get_TextBounds(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds* This,__x_ABI_CWindows_CFoundation_CRect *value) {
+    return This->lpVtbl->get_TextBounds(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_put_TextBounds(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds* This,__x_ABI_CWindows_CFoundation_CRect value) {
+    return This->lpVtbl->put_TextBounds(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_get_ControlBounds(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds* This,__x_ABI_CWindows_CFoundation_CRect *value) {
+    return This->lpVtbl->get_ControlBounds(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_put_ControlBounds(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds* This,__x_ABI_CWindows_CFoundation_CRect value) {
+    return This->lpVtbl->put_ControlBounds(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define IID_ICoreTextLayoutBounds IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds
+#define ICoreTextLayoutBoundsVtbl __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBoundsVtbl
+#define ICoreTextLayoutBounds __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds
+#define ICoreTextLayoutBounds_QueryInterface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_QueryInterface
+#define ICoreTextLayoutBounds_AddRef __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_AddRef
+#define ICoreTextLayoutBounds_Release __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_Release
+#define ICoreTextLayoutBounds_GetIids __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_GetIids
+#define ICoreTextLayoutBounds_GetRuntimeClassName __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_GetRuntimeClassName
+#define ICoreTextLayoutBounds_GetTrustLevel __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_GetTrustLevel
+#define ICoreTextLayoutBounds_get_TextBounds __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_get_TextBounds
+#define ICoreTextLayoutBounds_put_TextBounds __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_put_TextBounds
+#define ICoreTextLayoutBounds_get_ControlBounds __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_get_ControlBounds
+#define ICoreTextLayoutBounds_put_ControlBounds __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_put_ControlBounds
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * ICoreTextLayoutRequest interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest, 0x2555a8cc, 0x51fd, 0x4f03, 0x98,0xbf, 0xac,0x78,0x17,0x4d,0x68,0xe0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    MIDL_INTERFACE("2555a8cc-51fd-4f03-98bf-ac78174d68e0")
+                    ICoreTextLayoutRequest : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_Range(
+                            ABI::Windows::UI::Text::Core::CoreTextRange *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_LayoutBounds(
+                            ABI::Windows::UI::Text::Core::ICoreTextLayoutBounds **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_IsCanceled(
+                            boolean *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE GetDeferral(
+                            ABI::Windows::Foundation::IDeferral **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest, 0x2555a8cc, 0x51fd, 0x4f03, 0x98,0xbf, 0xac,0x78,0x17,0x4d,0x68,0xe0)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest *This,
+        TrustLevel *trustLevel);
+
+    /*** ICoreTextLayoutRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Range)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_LayoutBounds)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsCanceled)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeferral)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest *This,
+        __x_ABI_CWindows_CFoundation_CIDeferral **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestVtbl;
+
+interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest {
+    CONST_VTBL __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** ICoreTextLayoutRequest methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_get_Range(This,value) (This)->lpVtbl->get_Range(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_get_LayoutBounds(This,value) (This)->lpVtbl->get_LayoutBounds(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_get_IsCanceled(This,value) (This)->lpVtbl->get_IsCanceled(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_GetDeferral(This,value) (This)->lpVtbl->GetDeferral(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_QueryInterface(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_AddRef(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_Release(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_GetIids(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_GetRuntimeClassName(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_GetTrustLevel(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** ICoreTextLayoutRequest methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_get_Range(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange *value) {
+    return This->lpVtbl->get_Range(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_get_LayoutBounds(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest* This,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutBounds **value) {
+    return This->lpVtbl->get_LayoutBounds(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_get_IsCanceled(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest* This,boolean *value) {
+    return This->lpVtbl->get_IsCanceled(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_GetDeferral(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest* This,__x_ABI_CWindows_CFoundation_CIDeferral **value) {
+    return This->lpVtbl->GetDeferral(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define IID_ICoreTextLayoutRequest IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest
+#define ICoreTextLayoutRequestVtbl __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestVtbl
+#define ICoreTextLayoutRequest __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest
+#define ICoreTextLayoutRequest_QueryInterface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_QueryInterface
+#define ICoreTextLayoutRequest_AddRef __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_AddRef
+#define ICoreTextLayoutRequest_Release __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_Release
+#define ICoreTextLayoutRequest_GetIids __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_GetIids
+#define ICoreTextLayoutRequest_GetRuntimeClassName __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_GetRuntimeClassName
+#define ICoreTextLayoutRequest_GetTrustLevel __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_GetTrustLevel
+#define ICoreTextLayoutRequest_get_Range __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_get_Range
+#define ICoreTextLayoutRequest_get_LayoutBounds __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_get_LayoutBounds
+#define ICoreTextLayoutRequest_get_IsCanceled __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_get_IsCanceled
+#define ICoreTextLayoutRequest_GetDeferral __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_GetDeferral
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * ICoreTextLayoutRequestedEventArgs interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs, 0xb1dc6ae0, 0x9a7b, 0x4e9e, 0xa5,0x66, 0x4a,0x6b,0x5f,0x8a,0xd6,0x76);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    MIDL_INTERFACE("b1dc6ae0-9a7b-4e9e-a566-4a6b5f8ad676")
+                    ICoreTextLayoutRequestedEventArgs : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_Request(
+                            ABI::Windows::UI::Text::Core::ICoreTextLayoutRequest **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs, 0xb1dc6ae0, 0x9a7b, 0x4e9e, 0xa5,0x66, 0x4a,0x6b,0x5f,0x8a,0xd6,0x76)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs *This,
+        TrustLevel *trustLevel);
+
+    /*** ICoreTextLayoutRequestedEventArgs methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Request)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgsVtbl;
+
+interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs {
+    CONST_VTBL __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** ICoreTextLayoutRequestedEventArgs methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_get_Request(This,value) (This)->lpVtbl->get_Request(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_QueryInterface(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_AddRef(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_Release(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_GetIids(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_GetRuntimeClassName(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_GetTrustLevel(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** ICoreTextLayoutRequestedEventArgs methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_get_Request(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequest **value) {
+    return This->lpVtbl->get_Request(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define IID_ICoreTextLayoutRequestedEventArgs IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs
+#define ICoreTextLayoutRequestedEventArgsVtbl __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgsVtbl
+#define ICoreTextLayoutRequestedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs
+#define ICoreTextLayoutRequestedEventArgs_QueryInterface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_QueryInterface
+#define ICoreTextLayoutRequestedEventArgs_AddRef __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_AddRef
+#define ICoreTextLayoutRequestedEventArgs_Release __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_Release
+#define ICoreTextLayoutRequestedEventArgs_GetIids __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_GetIids
+#define ICoreTextLayoutRequestedEventArgs_GetRuntimeClassName __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_GetRuntimeClassName
+#define ICoreTextLayoutRequestedEventArgs_GetTrustLevel __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_GetTrustLevel
+#define ICoreTextLayoutRequestedEventArgs_get_Request __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_get_Request
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * ICoreTextSelectionRequest interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest, 0xf0a70403, 0x208b, 0x4301, 0x88,0x3c, 0x74,0xca,0x74,0x85,0xfd,0x8d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    MIDL_INTERFACE("f0a70403-208b-4301-883c-74ca7485fd8d")
+                    ICoreTextSelectionRequest : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_Selection(
+                            ABI::Windows::UI::Text::Core::CoreTextRange *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_Selection(
+                            ABI::Windows::UI::Text::Core::CoreTextRange value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_IsCanceled(
+                            boolean *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE GetDeferral(
+                            ABI::Windows::Foundation::IDeferral **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest, 0xf0a70403, 0x208b, 0x4301, 0x88,0x3c, 0x74,0xca,0x74,0x85,0xfd,0x8d)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest *This,
+        TrustLevel *trustLevel);
+
+    /*** ICoreTextSelectionRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Selection)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Selection)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsCanceled)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeferral)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest *This,
+        __x_ABI_CWindows_CFoundation_CIDeferral **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestVtbl;
+
+interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest {
+    CONST_VTBL __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** ICoreTextSelectionRequest methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_get_Selection(This,value) (This)->lpVtbl->get_Selection(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_put_Selection(This,value) (This)->lpVtbl->put_Selection(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_get_IsCanceled(This,value) (This)->lpVtbl->get_IsCanceled(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_GetDeferral(This,value) (This)->lpVtbl->GetDeferral(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_QueryInterface(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_AddRef(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_Release(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_GetIids(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_GetRuntimeClassName(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_GetTrustLevel(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** ICoreTextSelectionRequest methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_get_Selection(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange *value) {
+    return This->lpVtbl->get_Selection(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_put_Selection(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange value) {
+    return This->lpVtbl->put_Selection(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_get_IsCanceled(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest* This,boolean *value) {
+    return This->lpVtbl->get_IsCanceled(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_GetDeferral(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest* This,__x_ABI_CWindows_CFoundation_CIDeferral **value) {
+    return This->lpVtbl->GetDeferral(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define IID_ICoreTextSelectionRequest IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest
+#define ICoreTextSelectionRequestVtbl __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestVtbl
+#define ICoreTextSelectionRequest __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest
+#define ICoreTextSelectionRequest_QueryInterface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_QueryInterface
+#define ICoreTextSelectionRequest_AddRef __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_AddRef
+#define ICoreTextSelectionRequest_Release __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_Release
+#define ICoreTextSelectionRequest_GetIids __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_GetIids
+#define ICoreTextSelectionRequest_GetRuntimeClassName __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_GetRuntimeClassName
+#define ICoreTextSelectionRequest_GetTrustLevel __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_GetTrustLevel
+#define ICoreTextSelectionRequest_get_Selection __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_get_Selection
+#define ICoreTextSelectionRequest_put_Selection __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_put_Selection
+#define ICoreTextSelectionRequest_get_IsCanceled __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_get_IsCanceled
+#define ICoreTextSelectionRequest_GetDeferral __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_GetDeferral
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * ICoreTextSelectionRequestedEventArgs interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs, 0x13c6682b, 0xf614, 0x421a, 0x8f,0x4b, 0x9e,0xc8,0xa5,0xa3,0x7f,0xcd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    MIDL_INTERFACE("13c6682b-f614-421a-8f4b-9ec8a5a37fcd")
+                    ICoreTextSelectionRequestedEventArgs : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_Request(
+                            ABI::Windows::UI::Text::Core::ICoreTextSelectionRequest **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs, 0x13c6682b, 0xf614, 0x421a, 0x8f,0x4b, 0x9e,0xc8,0xa5,0xa3,0x7f,0xcd)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs *This,
+        TrustLevel *trustLevel);
+
+    /*** ICoreTextSelectionRequestedEventArgs methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Request)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgsVtbl;
+
+interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs {
+    CONST_VTBL __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** ICoreTextSelectionRequestedEventArgs methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_get_Request(This,value) (This)->lpVtbl->get_Request(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_QueryInterface(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_AddRef(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_Release(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_GetIids(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_GetRuntimeClassName(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_GetTrustLevel(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** ICoreTextSelectionRequestedEventArgs methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_get_Request(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequest **value) {
+    return This->lpVtbl->get_Request(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define IID_ICoreTextSelectionRequestedEventArgs IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs
+#define ICoreTextSelectionRequestedEventArgsVtbl __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgsVtbl
+#define ICoreTextSelectionRequestedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs
+#define ICoreTextSelectionRequestedEventArgs_QueryInterface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_QueryInterface
+#define ICoreTextSelectionRequestedEventArgs_AddRef __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_AddRef
+#define ICoreTextSelectionRequestedEventArgs_Release __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_Release
+#define ICoreTextSelectionRequestedEventArgs_GetIids __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_GetIids
+#define ICoreTextSelectionRequestedEventArgs_GetRuntimeClassName __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_GetRuntimeClassName
+#define ICoreTextSelectionRequestedEventArgs_GetTrustLevel __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_GetTrustLevel
+#define ICoreTextSelectionRequestedEventArgs_get_Request __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_get_Request
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * ICoreTextTextRequest interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest, 0x50d950a9, 0xf51e, 0x4cc1, 0x8c,0xa1, 0xe6,0x34,0x6d,0x1a,0x61,0xbe);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    MIDL_INTERFACE("50d950a9-f51e-4cc1-8ca1-e6346d1a61be")
+                    ICoreTextTextRequest : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_Range(
+                            ABI::Windows::UI::Text::Core::CoreTextRange *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_Text(
+                            HSTRING *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_Text(
+                            HSTRING value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_IsCanceled(
+                            boolean *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE GetDeferral(
+                            ABI::Windows::Foundation::IDeferral **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest, 0x50d950a9, 0xf51e, 0x4cc1, 0x8c,0xa1, 0xe6,0x34,0x6d,0x1a,0x61,0xbe)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest *This,
+        TrustLevel *trustLevel);
+
+    /*** ICoreTextTextRequest methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Range)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange *value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Text)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest *This,
+        HSTRING *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Text)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest *This,
+        HSTRING value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsCanceled)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeferral)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest *This,
+        __x_ABI_CWindows_CFoundation_CIDeferral **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestVtbl;
+
+interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest {
+    CONST_VTBL __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** ICoreTextTextRequest methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_get_Range(This,value) (This)->lpVtbl->get_Range(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_get_Text(This,value) (This)->lpVtbl->get_Text(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_put_Text(This,value) (This)->lpVtbl->put_Text(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_get_IsCanceled(This,value) (This)->lpVtbl->get_IsCanceled(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_GetDeferral(This,value) (This)->lpVtbl->GetDeferral(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_QueryInterface(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_AddRef(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_Release(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_GetIids(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_GetRuntimeClassName(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_GetTrustLevel(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** ICoreTextTextRequest methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_get_Range(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange *value) {
+    return This->lpVtbl->get_Range(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_get_Text(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest* This,HSTRING *value) {
+    return This->lpVtbl->get_Text(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_put_Text(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest* This,HSTRING value) {
+    return This->lpVtbl->put_Text(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_get_IsCanceled(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest* This,boolean *value) {
+    return This->lpVtbl->get_IsCanceled(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_GetDeferral(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest* This,__x_ABI_CWindows_CFoundation_CIDeferral **value) {
+    return This->lpVtbl->GetDeferral(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define IID_ICoreTextTextRequest IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest
+#define ICoreTextTextRequestVtbl __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestVtbl
+#define ICoreTextTextRequest __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest
+#define ICoreTextTextRequest_QueryInterface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_QueryInterface
+#define ICoreTextTextRequest_AddRef __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_AddRef
+#define ICoreTextTextRequest_Release __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_Release
+#define ICoreTextTextRequest_GetIids __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_GetIids
+#define ICoreTextTextRequest_GetRuntimeClassName __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_GetRuntimeClassName
+#define ICoreTextTextRequest_GetTrustLevel __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_GetTrustLevel
+#define ICoreTextTextRequest_get_Range __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_get_Range
+#define ICoreTextTextRequest_get_Text __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_get_Text
+#define ICoreTextTextRequest_put_Text __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_put_Text
+#define ICoreTextTextRequest_get_IsCanceled __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_get_IsCanceled
+#define ICoreTextTextRequest_GetDeferral __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_GetDeferral
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * ICoreTextTextRequestedEventArgs interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs, 0xf096a2d0, 0x41c6, 0x4c02, 0x8b,0x1a, 0xd9,0x53,0xb0,0x0c,0xab,0xb3);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    MIDL_INTERFACE("f096a2d0-41c6-4c02-8b1a-d953b00cabb3")
+                    ICoreTextTextRequestedEventArgs : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_Request(
+                            ABI::Windows::UI::Text::Core::ICoreTextTextRequest **value) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs, 0xf096a2d0, 0x41c6, 0x4c02, 0x8b,0x1a, 0xd9,0x53,0xb0,0x0c,0xab,0xb3)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs *This,
+        TrustLevel *trustLevel);
+
+    /*** ICoreTextTextRequestedEventArgs methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Request)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest **value);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgsVtbl;
+
+interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs {
+    CONST_VTBL __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** ICoreTextTextRequestedEventArgs methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_get_Request(This,value) (This)->lpVtbl->get_Request(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_QueryInterface(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_AddRef(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_Release(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_GetIids(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_GetRuntimeClassName(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_GetTrustLevel(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** ICoreTextTextRequestedEventArgs methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_get_Request(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequest **value) {
+    return This->lpVtbl->get_Request(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define IID_ICoreTextTextRequestedEventArgs IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs
+#define ICoreTextTextRequestedEventArgsVtbl __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgsVtbl
+#define ICoreTextTextRequestedEventArgs __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs
+#define ICoreTextTextRequestedEventArgs_QueryInterface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_QueryInterface
+#define ICoreTextTextRequestedEventArgs_AddRef __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_AddRef
+#define ICoreTextTextRequestedEventArgs_Release __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_Release
+#define ICoreTextTextRequestedEventArgs_GetIids __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_GetIids
+#define ICoreTextTextRequestedEventArgs_GetRuntimeClassName __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_GetRuntimeClassName
+#define ICoreTextTextRequestedEventArgs_GetTrustLevel __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_GetTrustLevel
+#define ICoreTextTextRequestedEventArgs_get_Request __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_get_Request
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * ICoreTextEditContext interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext, 0xbf6608af, 0x4041, 0x47c3, 0xb2,0x63, 0xa9,0x18,0xeb,0x5e,0xae,0xf2);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    MIDL_INTERFACE("bf6608af-4041-47c3-b263-a918eb5eaef2")
+                    ICoreTextEditContext : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_Name(
+                            HSTRING *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_Name(
+                            HSTRING value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_InputScope(
+                            ABI::Windows::UI::Text::Core::CoreTextInputScope *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_InputScope(
+                            ABI::Windows::UI::Text::Core::CoreTextInputScope value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_IsReadOnly(
+                            boolean *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_IsReadOnly(
+                            boolean value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE get_InputPaneDisplayPolicy(
+                            ABI::Windows::UI::Text::Core::CoreTextInputPaneDisplayPolicy *value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE put_InputPaneDisplayPolicy(
+                            ABI::Windows::UI::Text::Core::CoreTextInputPaneDisplayPolicy value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE add_TextRequested(
+                            ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextTextRequestedEventArgs* > *handler,
+                            EventRegistrationToken *cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE remove_TextRequested(
+                            EventRegistrationToken cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE add_SelectionRequested(
+                            ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextSelectionRequestedEventArgs* > *handler,
+                            EventRegistrationToken *cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE remove_SelectionRequested(
+                            EventRegistrationToken cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE add_LayoutRequested(
+                            ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextLayoutRequestedEventArgs* > *handler,
+                            EventRegistrationToken *cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE remove_LayoutRequested(
+                            EventRegistrationToken cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE add_TextUpdating(
+                            ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextTextUpdatingEventArgs* > *handler,
+                            EventRegistrationToken *cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE remove_TextUpdating(
+                            EventRegistrationToken cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE add_SelectionUpdating(
+                            ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextSelectionUpdatingEventArgs* > *handler,
+                            EventRegistrationToken *cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE remove_SelectionUpdating(
+                            EventRegistrationToken cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE add_FormatUpdating(
+                            ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextFormatUpdatingEventArgs* > *handler,
+                            EventRegistrationToken *cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE remove_FormatUpdating(
+                            EventRegistrationToken cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE add_CompositionStarted(
+                            ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextCompositionStartedEventArgs* > *handler,
+                            EventRegistrationToken *cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE remove_CompositionStarted(
+                            EventRegistrationToken cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE add_CompositionCompleted(
+                            ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextCompositionCompletedEventArgs* > *handler,
+                            EventRegistrationToken *cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE remove_CompositionCompleted(
+                            EventRegistrationToken cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE add_FocusRemoved(
+                            ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,IInspectable* > *handler,
+                            EventRegistrationToken *cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE remove_FocusRemoved(
+                            EventRegistrationToken cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE NotifyFocusEnter(
+                            ) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE NotifyFocusLeave(
+                            ) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE NotifyTextChanged(
+                            ABI::Windows::UI::Text::Core::CoreTextRange modifiedRange,
+                            INT32 newLength,
+                            ABI::Windows::UI::Text::Core::CoreTextRange newSelection) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE NotifySelectionChanged(
+                            ABI::Windows::UI::Text::Core::CoreTextRange selection) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE NotifyLayoutChanged(
+                            ) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext, 0xbf6608af, 0x4041, 0x47c3, 0xb2,0x63, 0xa9,0x18,0xeb,0x5e,0xae,0xf2)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContextVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        TrustLevel *trustLevel);
+
+    /*** ICoreTextEditContext methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Name)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        HSTRING *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_Name)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        HSTRING value);
+
+    HRESULT (STDMETHODCALLTYPE *get_InputScope)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputScope *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_InputScope)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputScope value);
+
+    HRESULT (STDMETHODCALLTYPE *get_IsReadOnly)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        boolean *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_IsReadOnly)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        boolean value);
+
+    HRESULT (STDMETHODCALLTYPE *get_InputPaneDisplayPolicy)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputPaneDisplayPolicy *value);
+
+    HRESULT (STDMETHODCALLTYPE *put_InputPaneDisplayPolicy)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputPaneDisplayPolicy value);
+
+    HRESULT (STDMETHODCALLTYPE *add_TextRequested)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs *handler,
+        EventRegistrationToken *cookie);
+
+    HRESULT (STDMETHODCALLTYPE *remove_TextRequested)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        EventRegistrationToken cookie);
+
+    HRESULT (STDMETHODCALLTYPE *add_SelectionRequested)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs *handler,
+        EventRegistrationToken *cookie);
+
+    HRESULT (STDMETHODCALLTYPE *remove_SelectionRequested)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        EventRegistrationToken cookie);
+
+    HRESULT (STDMETHODCALLTYPE *add_LayoutRequested)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs *handler,
+        EventRegistrationToken *cookie);
+
+    HRESULT (STDMETHODCALLTYPE *remove_LayoutRequested)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        EventRegistrationToken cookie);
+
+    HRESULT (STDMETHODCALLTYPE *add_TextUpdating)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs *handler,
+        EventRegistrationToken *cookie);
+
+    HRESULT (STDMETHODCALLTYPE *remove_TextUpdating)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        EventRegistrationToken cookie);
+
+    HRESULT (STDMETHODCALLTYPE *add_SelectionUpdating)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs *handler,
+        EventRegistrationToken *cookie);
+
+    HRESULT (STDMETHODCALLTYPE *remove_SelectionUpdating)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        EventRegistrationToken cookie);
+
+    HRESULT (STDMETHODCALLTYPE *add_FormatUpdating)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs *handler,
+        EventRegistrationToken *cookie);
+
+    HRESULT (STDMETHODCALLTYPE *remove_FormatUpdating)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        EventRegistrationToken cookie);
+
+    HRESULT (STDMETHODCALLTYPE *add_CompositionStarted)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs *handler,
+        EventRegistrationToken *cookie);
+
+    HRESULT (STDMETHODCALLTYPE *remove_CompositionStarted)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        EventRegistrationToken cookie);
+
+    HRESULT (STDMETHODCALLTYPE *add_CompositionCompleted)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs *handler,
+        EventRegistrationToken *cookie);
+
+    HRESULT (STDMETHODCALLTYPE *remove_CompositionCompleted)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        EventRegistrationToken cookie);
+
+    HRESULT (STDMETHODCALLTYPE *add_FocusRemoved)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable *handler,
+        EventRegistrationToken *cookie);
+
+    HRESULT (STDMETHODCALLTYPE *remove_FocusRemoved)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        EventRegistrationToken cookie);
+
+    HRESULT (STDMETHODCALLTYPE *NotifyFocusEnter)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This);
+
+    HRESULT (STDMETHODCALLTYPE *NotifyFocusLeave)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This);
+
+    HRESULT (STDMETHODCALLTYPE *NotifyTextChanged)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange modifiedRange,
+        INT32 newLength,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange newSelection);
+
+    HRESULT (STDMETHODCALLTYPE *NotifySelectionChanged)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange selection);
+
+    HRESULT (STDMETHODCALLTYPE *NotifyLayoutChanged)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *This);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContextVtbl;
+
+interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext {
+    CONST_VTBL __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContextVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** ICoreTextEditContext methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_get_Name(This,value) (This)->lpVtbl->get_Name(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_put_Name(This,value) (This)->lpVtbl->put_Name(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_get_InputScope(This,value) (This)->lpVtbl->get_InputScope(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_put_InputScope(This,value) (This)->lpVtbl->put_InputScope(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_get_IsReadOnly(This,value) (This)->lpVtbl->get_IsReadOnly(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_put_IsReadOnly(This,value) (This)->lpVtbl->put_IsReadOnly(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_get_InputPaneDisplayPolicy(This,value) (This)->lpVtbl->get_InputPaneDisplayPolicy(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_put_InputPaneDisplayPolicy(This,value) (This)->lpVtbl->put_InputPaneDisplayPolicy(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_TextRequested(This,handler,cookie) (This)->lpVtbl->add_TextRequested(This,handler,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_TextRequested(This,cookie) (This)->lpVtbl->remove_TextRequested(This,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_SelectionRequested(This,handler,cookie) (This)->lpVtbl->add_SelectionRequested(This,handler,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_SelectionRequested(This,cookie) (This)->lpVtbl->remove_SelectionRequested(This,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_LayoutRequested(This,handler,cookie) (This)->lpVtbl->add_LayoutRequested(This,handler,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_LayoutRequested(This,cookie) (This)->lpVtbl->remove_LayoutRequested(This,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_TextUpdating(This,handler,cookie) (This)->lpVtbl->add_TextUpdating(This,handler,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_TextUpdating(This,cookie) (This)->lpVtbl->remove_TextUpdating(This,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_SelectionUpdating(This,handler,cookie) (This)->lpVtbl->add_SelectionUpdating(This,handler,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_SelectionUpdating(This,cookie) (This)->lpVtbl->remove_SelectionUpdating(This,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_FormatUpdating(This,handler,cookie) (This)->lpVtbl->add_FormatUpdating(This,handler,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_FormatUpdating(This,cookie) (This)->lpVtbl->remove_FormatUpdating(This,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_CompositionStarted(This,handler,cookie) (This)->lpVtbl->add_CompositionStarted(This,handler,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_CompositionStarted(This,cookie) (This)->lpVtbl->remove_CompositionStarted(This,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_CompositionCompleted(This,handler,cookie) (This)->lpVtbl->add_CompositionCompleted(This,handler,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_CompositionCompleted(This,cookie) (This)->lpVtbl->remove_CompositionCompleted(This,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_FocusRemoved(This,handler,cookie) (This)->lpVtbl->add_FocusRemoved(This,handler,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_FocusRemoved(This,cookie) (This)->lpVtbl->remove_FocusRemoved(This,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_NotifyFocusEnter(This) (This)->lpVtbl->NotifyFocusEnter(This)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_NotifyFocusLeave(This) (This)->lpVtbl->NotifyFocusLeave(This)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_NotifyTextChanged(This,modifiedRange,newLength,newSelection) (This)->lpVtbl->NotifyTextChanged(This,modifiedRange,newLength,newSelection)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_NotifySelectionChanged(This,selection) (This)->lpVtbl->NotifySelectionChanged(This,selection)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_NotifyLayoutChanged(This) (This)->lpVtbl->NotifyLayoutChanged(This)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_QueryInterface(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_AddRef(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_Release(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_GetIids(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_GetRuntimeClassName(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_GetTrustLevel(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** ICoreTextEditContext methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_get_Name(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,HSTRING *value) {
+    return This->lpVtbl->get_Name(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_put_Name(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,HSTRING value) {
+    return This->lpVtbl->put_Name(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_get_InputScope(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputScope *value) {
+    return This->lpVtbl->get_InputScope(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_put_InputScope(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputScope value) {
+    return This->lpVtbl->put_InputScope(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_get_IsReadOnly(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,boolean *value) {
+    return This->lpVtbl->get_IsReadOnly(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_put_IsReadOnly(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,boolean value) {
+    return This->lpVtbl->put_IsReadOnly(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_get_InputPaneDisplayPolicy(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputPaneDisplayPolicy *value) {
+    return This->lpVtbl->get_InputPaneDisplayPolicy(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_put_InputPaneDisplayPolicy(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextInputPaneDisplayPolicy value) {
+    return This->lpVtbl->put_InputPaneDisplayPolicy(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_TextRequested(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs *handler,EventRegistrationToken *cookie) {
+    return This->lpVtbl->add_TextRequested(This,handler,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_TextRequested(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,EventRegistrationToken cookie) {
+    return This->lpVtbl->remove_TextRequested(This,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_SelectionRequested(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs *handler,EventRegistrationToken *cookie) {
+    return This->lpVtbl->add_SelectionRequested(This,handler,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_SelectionRequested(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,EventRegistrationToken cookie) {
+    return This->lpVtbl->remove_SelectionRequested(This,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_LayoutRequested(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs *handler,EventRegistrationToken *cookie) {
+    return This->lpVtbl->add_LayoutRequested(This,handler,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_LayoutRequested(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,EventRegistrationToken cookie) {
+    return This->lpVtbl->remove_LayoutRequested(This,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_TextUpdating(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs *handler,EventRegistrationToken *cookie) {
+    return This->lpVtbl->add_TextUpdating(This,handler,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_TextUpdating(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,EventRegistrationToken cookie) {
+    return This->lpVtbl->remove_TextUpdating(This,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_SelectionUpdating(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs *handler,EventRegistrationToken *cookie) {
+    return This->lpVtbl->add_SelectionUpdating(This,handler,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_SelectionUpdating(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,EventRegistrationToken cookie) {
+    return This->lpVtbl->remove_SelectionUpdating(This,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_FormatUpdating(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs *handler,EventRegistrationToken *cookie) {
+    return This->lpVtbl->add_FormatUpdating(This,handler,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_FormatUpdating(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,EventRegistrationToken cookie) {
+    return This->lpVtbl->remove_FormatUpdating(This,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_CompositionStarted(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs *handler,EventRegistrationToken *cookie) {
+    return This->lpVtbl->add_CompositionStarted(This,handler,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_CompositionStarted(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,EventRegistrationToken cookie) {
+    return This->lpVtbl->remove_CompositionStarted(This,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_CompositionCompleted(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs *handler,EventRegistrationToken *cookie) {
+    return This->lpVtbl->add_CompositionCompleted(This,handler,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_CompositionCompleted(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,EventRegistrationToken cookie) {
+    return This->lpVtbl->remove_CompositionCompleted(This,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_FocusRemoved(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable *handler,EventRegistrationToken *cookie) {
+    return This->lpVtbl->add_FocusRemoved(This,handler,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_FocusRemoved(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,EventRegistrationToken cookie) {
+    return This->lpVtbl->remove_FocusRemoved(This,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_NotifyFocusEnter(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This) {
+    return This->lpVtbl->NotifyFocusEnter(This);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_NotifyFocusLeave(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This) {
+    return This->lpVtbl->NotifyFocusLeave(This);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_NotifyTextChanged(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange modifiedRange,INT32 newLength,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange newSelection) {
+    return This->lpVtbl->NotifyTextChanged(This,modifiedRange,newLength,newSelection);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_NotifySelectionChanged(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This,__x_ABI_CWindows_CUI_CText_CCore_CCoreTextRange selection) {
+    return This->lpVtbl->NotifySelectionChanged(This,selection);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_NotifyLayoutChanged(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext* This) {
+    return This->lpVtbl->NotifyLayoutChanged(This);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define IID_ICoreTextEditContext IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext
+#define ICoreTextEditContextVtbl __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContextVtbl
+#define ICoreTextEditContext __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext
+#define ICoreTextEditContext_QueryInterface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_QueryInterface
+#define ICoreTextEditContext_AddRef __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_AddRef
+#define ICoreTextEditContext_Release __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_Release
+#define ICoreTextEditContext_GetIids __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_GetIids
+#define ICoreTextEditContext_GetRuntimeClassName __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_GetRuntimeClassName
+#define ICoreTextEditContext_GetTrustLevel __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_GetTrustLevel
+#define ICoreTextEditContext_get_Name __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_get_Name
+#define ICoreTextEditContext_put_Name __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_put_Name
+#define ICoreTextEditContext_get_InputScope __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_get_InputScope
+#define ICoreTextEditContext_put_InputScope __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_put_InputScope
+#define ICoreTextEditContext_get_IsReadOnly __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_get_IsReadOnly
+#define ICoreTextEditContext_put_IsReadOnly __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_put_IsReadOnly
+#define ICoreTextEditContext_get_InputPaneDisplayPolicy __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_get_InputPaneDisplayPolicy
+#define ICoreTextEditContext_put_InputPaneDisplayPolicy __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_put_InputPaneDisplayPolicy
+#define ICoreTextEditContext_add_TextRequested __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_TextRequested
+#define ICoreTextEditContext_remove_TextRequested __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_TextRequested
+#define ICoreTextEditContext_add_SelectionRequested __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_SelectionRequested
+#define ICoreTextEditContext_remove_SelectionRequested __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_SelectionRequested
+#define ICoreTextEditContext_add_LayoutRequested __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_LayoutRequested
+#define ICoreTextEditContext_remove_LayoutRequested __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_LayoutRequested
+#define ICoreTextEditContext_add_TextUpdating __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_TextUpdating
+#define ICoreTextEditContext_remove_TextUpdating __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_TextUpdating
+#define ICoreTextEditContext_add_SelectionUpdating __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_SelectionUpdating
+#define ICoreTextEditContext_remove_SelectionUpdating __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_SelectionUpdating
+#define ICoreTextEditContext_add_FormatUpdating __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_FormatUpdating
+#define ICoreTextEditContext_remove_FormatUpdating __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_FormatUpdating
+#define ICoreTextEditContext_add_CompositionStarted __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_CompositionStarted
+#define ICoreTextEditContext_remove_CompositionStarted __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_CompositionStarted
+#define ICoreTextEditContext_add_CompositionCompleted __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_CompositionCompleted
+#define ICoreTextEditContext_remove_CompositionCompleted __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_CompositionCompleted
+#define ICoreTextEditContext_add_FocusRemoved __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_add_FocusRemoved
+#define ICoreTextEditContext_remove_FocusRemoved __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_remove_FocusRemoved
+#define ICoreTextEditContext_NotifyFocusEnter __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_NotifyFocusEnter
+#define ICoreTextEditContext_NotifyFocusLeave __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_NotifyFocusLeave
+#define ICoreTextEditContext_NotifyTextChanged __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_NotifyTextChanged
+#define ICoreTextEditContext_NotifySelectionChanged __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_NotifySelectionChanged
+#define ICoreTextEditContext_NotifyLayoutChanged __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_NotifyLayoutChanged
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * ICoreTextServicesManager interface
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_INTERFACE_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager, 0xc2507d83, 0x6e0a, 0x4a8a, 0xbd,0xf8, 0x19,0x48,0x87,0x48,0x54,0xba);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                namespace Core {
+                    MIDL_INTERFACE("c2507d83-6e0a-4a8a-bdf8-1948874854ba")
+                    ICoreTextServicesManager : public IInspectable
+                    {
+                        virtual HRESULT STDMETHODCALLTYPE get_InputLanguage(
+                            ABI::Windows::Globalization::ILanguage **value) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE add_InputLanguageChanged(
+                            ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextServicesManager*,IInspectable* > *handler,
+                            EventRegistrationToken *cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE remove_InputLanguageChanged(
+                            EventRegistrationToken cookie) = 0;
+
+                        virtual HRESULT STDMETHODCALLTYPE CreateEditContext(
+                            ABI::Windows::UI::Text::Core::ICoreTextEditContext **out) = 0;
+
+                    };
+                }
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager, 0xc2507d83, 0x6e0a, 0x4a8a, 0xbd,0xf8, 0x19,0x48,0x87,0x48,0x54,0xba)
+#endif
+#else
+typedef struct __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager *This,
+        TrustLevel *trustLevel);
+
+    /*** ICoreTextServicesManager methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_InputLanguage)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager *This,
+        __x_ABI_CWindows_CGlobalization_CILanguage **value);
+
+    HRESULT (STDMETHODCALLTYPE *add_InputLanguageChanged)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager *This,
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable *handler,
+        EventRegistrationToken *cookie);
+
+    HRESULT (STDMETHODCALLTYPE *remove_InputLanguageChanged)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager *This,
+        EventRegistrationToken cookie);
+
+    HRESULT (STDMETHODCALLTYPE *CreateEditContext)(
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext **out);
+
+    END_INTERFACE
+} __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerVtbl;
+
+interface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager {
+    CONST_VTBL __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** ICoreTextServicesManager methods ***/
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_get_InputLanguage(This,value) (This)->lpVtbl->get_InputLanguage(This,value)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_add_InputLanguageChanged(This,handler,cookie) (This)->lpVtbl->add_InputLanguageChanged(This,handler,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_remove_InputLanguageChanged(This,cookie) (This)->lpVtbl->remove_InputLanguageChanged(This,cookie)
+#define __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_CreateEditContext(This,out) (This)->lpVtbl->CreateEditContext(This,out)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_QueryInterface(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_AddRef(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_Release(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_GetIids(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_GetRuntimeClassName(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_GetTrustLevel(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** ICoreTextServicesManager methods ***/
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_get_InputLanguage(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager* This,__x_ABI_CWindows_CGlobalization_CILanguage **value) {
+    return This->lpVtbl->get_InputLanguage(This,value);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_add_InputLanguageChanged(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager* This,__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable *handler,EventRegistrationToken *cookie) {
+    return This->lpVtbl->add_InputLanguageChanged(This,handler,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_remove_InputLanguageChanged(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager* This,EventRegistrationToken cookie) {
+    return This->lpVtbl->remove_InputLanguageChanged(This,cookie);
+}
+static inline HRESULT __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_CreateEditContext(__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager* This,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext **out) {
+    return This->lpVtbl->CreateEditContext(This,out);
+}
+#endif
+#ifdef WIDL_using_Windows_UI_Text_Core
+#define IID_ICoreTextServicesManager IID___x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager
+#define ICoreTextServicesManagerVtbl __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManagerVtbl
+#define ICoreTextServicesManager __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager
+#define ICoreTextServicesManager_QueryInterface __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_QueryInterface
+#define ICoreTextServicesManager_AddRef __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_AddRef
+#define ICoreTextServicesManager_Release __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_Release
+#define ICoreTextServicesManager_GetIids __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_GetIids
+#define ICoreTextServicesManager_GetRuntimeClassName __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_GetRuntimeClassName
+#define ICoreTextServicesManager_GetTrustLevel __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_GetTrustLevel
+#define ICoreTextServicesManager_get_InputLanguage __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_get_InputLanguage
+#define ICoreTextServicesManager_add_InputLanguageChanged __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_add_InputLanguageChanged
+#define ICoreTextServicesManager_remove_InputLanguageChanged __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_remove_InputLanguageChanged
+#define ICoreTextServicesManager_CreateEditContext __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_CreateEditContext
+#endif /* WIDL_using_Windows_UI_Text_Core */
+#endif
+
+#endif
+
+#endif  /* ____x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager_INTERFACE_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.Text.Core.CoreTextServicesManager
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_Text_Core_CoreTextServicesManager_DEFINED
+#define RUNTIMECLASS_Windows_UI_Text_Core_CoreTextServicesManager_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextServicesManager[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','S','e','r','v','i','c','e','s','M','a','n','a','g','e','r',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextServicesManager[] = L"Windows.UI.Text.Core.CoreTextServicesManager";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextServicesManager[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','S','e','r','v','i','c','e','s','M','a','n','a','g','e','r',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_Text_Core_CoreTextServicesManager_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.Text.Core.CoreTextFormatUpdatingEventArgs
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_Text_Core_CoreTextFormatUpdatingEventArgs_DEFINED
+#define RUNTIMECLASS_Windows_UI_Text_Core_CoreTextFormatUpdatingEventArgs_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextFormatUpdatingEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','F','o','r','m','a','t','U','p','d','a','t','i','n','g','E','v','e','n','t','A','r','g','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextFormatUpdatingEventArgs[] = L"Windows.UI.Text.Core.CoreTextFormatUpdatingEventArgs";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextFormatUpdatingEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','F','o','r','m','a','t','U','p','d','a','t','i','n','g','E','v','e','n','t','A','r','g','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_Text_Core_CoreTextFormatUpdatingEventArgs_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.Text.Core.CoreTextEditContext
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_Text_Core_CoreTextEditContext_DEFINED
+#define RUNTIMECLASS_Windows_UI_Text_Core_CoreTextEditContext_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextEditContext[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','E','d','i','t','C','o','n','t','e','x','t',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextEditContext[] = L"Windows.UI.Text.Core.CoreTextEditContext";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextEditContext[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','E','d','i','t','C','o','n','t','e','x','t',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_Text_Core_CoreTextEditContext_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.Text.Core.CoreTextCompositionCompletedEventArgs
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_Text_Core_CoreTextCompositionCompletedEventArgs_DEFINED
+#define RUNTIMECLASS_Windows_UI_Text_Core_CoreTextCompositionCompletedEventArgs_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextCompositionCompletedEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','C','o','m','p','o','s','i','t','i','o','n','C','o','m','p','l','e','t','e','d','E','v','e','n','t','A','r','g','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextCompositionCompletedEventArgs[] = L"Windows.UI.Text.Core.CoreTextCompositionCompletedEventArgs";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextCompositionCompletedEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','C','o','m','p','o','s','i','t','i','o','n','C','o','m','p','l','e','t','e','d','E','v','e','n','t','A','r','g','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_Text_Core_CoreTextCompositionCompletedEventArgs_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.Text.Core.CoreTextCompositionStartedEventArgs
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_Text_Core_CoreTextCompositionStartedEventArgs_DEFINED
+#define RUNTIMECLASS_Windows_UI_Text_Core_CoreTextCompositionStartedEventArgs_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextCompositionStartedEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','C','o','m','p','o','s','i','t','i','o','n','S','t','a','r','t','e','d','E','v','e','n','t','A','r','g','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextCompositionStartedEventArgs[] = L"Windows.UI.Text.Core.CoreTextCompositionStartedEventArgs";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextCompositionStartedEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','C','o','m','p','o','s','i','t','i','o','n','S','t','a','r','t','e','d','E','v','e','n','t','A','r','g','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_Text_Core_CoreTextCompositionStartedEventArgs_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.Text.Core.CoreTextLayoutRequestedEventArgs
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_Text_Core_CoreTextLayoutRequestedEventArgs_DEFINED
+#define RUNTIMECLASS_Windows_UI_Text_Core_CoreTextLayoutRequestedEventArgs_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextLayoutRequestedEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','L','a','y','o','u','t','R','e','q','u','e','s','t','e','d','E','v','e','n','t','A','r','g','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextLayoutRequestedEventArgs[] = L"Windows.UI.Text.Core.CoreTextLayoutRequestedEventArgs";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextLayoutRequestedEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','L','a','y','o','u','t','R','e','q','u','e','s','t','e','d','E','v','e','n','t','A','r','g','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_Text_Core_CoreTextLayoutRequestedEventArgs_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.Text.Core.CoreTextSelectionRequestedEventArgs
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_Text_Core_CoreTextSelectionRequestedEventArgs_DEFINED
+#define RUNTIMECLASS_Windows_UI_Text_Core_CoreTextSelectionRequestedEventArgs_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextSelectionRequestedEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','S','e','l','e','c','t','i','o','n','R','e','q','u','e','s','t','e','d','E','v','e','n','t','A','r','g','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextSelectionRequestedEventArgs[] = L"Windows.UI.Text.Core.CoreTextSelectionRequestedEventArgs";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextSelectionRequestedEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','S','e','l','e','c','t','i','o','n','R','e','q','u','e','s','t','e','d','E','v','e','n','t','A','r','g','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_Text_Core_CoreTextSelectionRequestedEventArgs_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.Text.Core.CoreTextSelectionUpdatingEventArgs
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_Text_Core_CoreTextSelectionUpdatingEventArgs_DEFINED
+#define RUNTIMECLASS_Windows_UI_Text_Core_CoreTextSelectionUpdatingEventArgs_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextSelectionUpdatingEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','S','e','l','e','c','t','i','o','n','U','p','d','a','t','i','n','g','E','v','e','n','t','A','r','g','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextSelectionUpdatingEventArgs[] = L"Windows.UI.Text.Core.CoreTextSelectionUpdatingEventArgs";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextSelectionUpdatingEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','S','e','l','e','c','t','i','o','n','U','p','d','a','t','i','n','g','E','v','e','n','t','A','r','g','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_Text_Core_CoreTextSelectionUpdatingEventArgs_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.Text.Core.CoreTextTextRequestedEventArgs
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_Text_Core_CoreTextTextRequestedEventArgs_DEFINED
+#define RUNTIMECLASS_Windows_UI_Text_Core_CoreTextTextRequestedEventArgs_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextTextRequestedEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','T','e','x','t','R','e','q','u','e','s','t','e','d','E','v','e','n','t','A','r','g','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextTextRequestedEventArgs[] = L"Windows.UI.Text.Core.CoreTextTextRequestedEventArgs";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextTextRequestedEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','T','e','x','t','R','e','q','u','e','s','t','e','d','E','v','e','n','t','A','r','g','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_Text_Core_CoreTextTextRequestedEventArgs_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.Text.Core.CoreTextTextUpdatingEventArgs
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_Text_Core_CoreTextTextUpdatingEventArgs_DEFINED
+#define RUNTIMECLASS_Windows_UI_Text_Core_CoreTextTextUpdatingEventArgs_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextTextUpdatingEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','T','e','x','t','U','p','d','a','t','i','n','g','E','v','e','n','t','A','r','g','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextTextUpdatingEventArgs[] = L"Windows.UI.Text.Core.CoreTextTextUpdatingEventArgs";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextTextUpdatingEventArgs[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','T','e','x','t','U','p','d','a','t','i','n','g','E','v','e','n','t','A','r','g','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_Text_Core_CoreTextTextUpdatingEventArgs_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.Text.Core.CoreTextLayoutBounds
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_Text_Core_CoreTextLayoutBounds_DEFINED
+#define RUNTIMECLASS_Windows_UI_Text_Core_CoreTextLayoutBounds_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextLayoutBounds[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','L','a','y','o','u','t','B','o','u','n','d','s',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextLayoutBounds[] = L"Windows.UI.Text.Core.CoreTextLayoutBounds";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextLayoutBounds[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','L','a','y','o','u','t','B','o','u','n','d','s',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_Text_Core_CoreTextLayoutBounds_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.Text.Core.CoreTextLayoutRequest
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_Text_Core_CoreTextLayoutRequest_DEFINED
+#define RUNTIMECLASS_Windows_UI_Text_Core_CoreTextLayoutRequest_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextLayoutRequest[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','L','a','y','o','u','t','R','e','q','u','e','s','t',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextLayoutRequest[] = L"Windows.UI.Text.Core.CoreTextLayoutRequest";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextLayoutRequest[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','L','a','y','o','u','t','R','e','q','u','e','s','t',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_Text_Core_CoreTextLayoutRequest_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.Text.Core.CoreTextSelectionRequest
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_Text_Core_CoreTextSelectionRequest_DEFINED
+#define RUNTIMECLASS_Windows_UI_Text_Core_CoreTextSelectionRequest_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextSelectionRequest[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','S','e','l','e','c','t','i','o','n','R','e','q','u','e','s','t',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextSelectionRequest[] = L"Windows.UI.Text.Core.CoreTextSelectionRequest";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextSelectionRequest[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','S','e','l','e','c','t','i','o','n','R','e','q','u','e','s','t',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_Text_Core_CoreTextSelectionRequest_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.Text.Core.CoreTextTextRequest
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_Text_Core_CoreTextTextRequest_DEFINED
+#define RUNTIMECLASS_Windows_UI_Text_Core_CoreTextTextRequest_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextTextRequest[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','T','e','x','t','R','e','q','u','e','s','t',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextTextRequest[] = L"Windows.UI.Text.Core.CoreTextTextRequest";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextTextRequest[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','T','e','x','t','R','e','q','u','e','s','t',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_Text_Core_CoreTextTextRequest_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*
+ * Class Windows.UI.Text.Core.CoreTextCompositionSegment
+ */
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef RUNTIMECLASS_Windows_UI_Text_Core_CoreTextCompositionSegment_DEFINED
+#define RUNTIMECLASS_Windows_UI_Text_Core_CoreTextCompositionSegment_DEFINED
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
+static const WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextCompositionSegment[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','C','o','m','p','o','s','i','t','i','o','n','S','e','g','m','e','n','t',0};
+#elif defined(__GNUC__) && !defined(__cplusplus)
+const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextCompositionSegment[] = L"Windows.UI.Text.Core.CoreTextCompositionSegment";
+#else
+extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Text_Core_CoreTextCompositionSegment[] = {'W','i','n','d','o','w','s','.','U','I','.','T','e','x','t','.','C','o','r','e','.','C','o','r','e','T','e','x','t','C','o','m','p','o','s','i','t','i','o','n','S','e','g','m','e','n','t',0};
+#endif
+#endif /* RUNTIMECLASS_Windows_UI_Text_Core_CoreTextCompositionSegment_DEFINED */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+
+/*****************************************************************************
+ * IVectorView<ABI::Windows::UI::Text::Core::CoreTextCompositionSegment* > interface
+ */
+#ifndef ____FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_INTERFACE_DEFINED__
+#define ____FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment, 0x214b64ff, 0xcf4d, 0x5dd4, 0x93,0x2a, 0x7b,0xc6,0x6e,0x69,0x03,0x6e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            namespace Collections {
+                template<>
+                MIDL_INTERFACE("214b64ff-cf4d-5dd4-932a-7bc66e69036e")
+                IVectorView<ABI::Windows::UI::Text::Core::CoreTextCompositionSegment* > : IVectorView_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextCompositionSegment*, ABI::Windows::UI::Text::Core::ICoreTextCompositionSegment* > >
+                {
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment, 0x214b64ff, 0xcf4d, 0x5dd4, 0x93,0x2a, 0x7b,0xc6,0x6e,0x69,0x03,0x6e)
+#endif
+#else
+typedef struct __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegmentVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment *This,
+        TrustLevel *trustLevel);
+
+    /*** IVectorView<ABI::Windows::UI::Text::Core::CoreTextCompositionSegment* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetAt)(
+        __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment *This,
+        UINT32 index,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment **value);
+
+    HRESULT (STDMETHODCALLTYPE *get_Size)(
+        __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment *This,
+        UINT32 *value);
+
+    HRESULT (STDMETHODCALLTYPE *IndexOf)(
+        __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment *element,
+        UINT32 *index,
+        BOOLEAN *value);
+
+    HRESULT (STDMETHODCALLTYPE *GetMany)(
+        __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment *This,
+        UINT32 start_index,
+        UINT32 items_size,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment **items,
+        UINT32 *value);
+
+    END_INTERFACE
+} __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegmentVtbl;
+
+interface __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment {
+    CONST_VTBL __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegmentVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IVectorView<ABI::Windows::UI::Text::Core::CoreTextCompositionSegment* > methods ***/
+#define __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
+#define __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
+#define __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
+#define __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_QueryInterface(__FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_AddRef(__FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_Release(__FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_GetIids(__FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_GetRuntimeClassName(__FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_GetTrustLevel(__FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IVectorView<ABI::Windows::UI::Text::Core::CoreTextCompositionSegment* > methods ***/
+static inline HRESULT __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_GetAt(__FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment* This,UINT32 index,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment **value) {
+    return This->lpVtbl->GetAt(This,index,value);
+}
+static inline HRESULT __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_get_Size(__FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment* This,UINT32 *value) {
+    return This->lpVtbl->get_Size(This,value);
+}
+static inline HRESULT __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_IndexOf(__FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment* This,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment *element,UINT32 *index,BOOLEAN *value) {
+    return This->lpVtbl->IndexOf(This,element,index,value);
+}
+static inline HRESULT __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_GetMany(__FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionSegment **items,UINT32 *value) {
+    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation_Collections
+#define IID_IVectorView_CoreTextCompositionSegment IID___FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment
+#define IVectorView_CoreTextCompositionSegmentVtbl __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegmentVtbl
+#define IVectorView_CoreTextCompositionSegment __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment
+#define IVectorView_CoreTextCompositionSegment_QueryInterface __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_QueryInterface
+#define IVectorView_CoreTextCompositionSegment_AddRef __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_AddRef
+#define IVectorView_CoreTextCompositionSegment_Release __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_Release
+#define IVectorView_CoreTextCompositionSegment_GetIids __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_GetIids
+#define IVectorView_CoreTextCompositionSegment_GetRuntimeClassName __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_GetRuntimeClassName
+#define IVectorView_CoreTextCompositionSegment_GetTrustLevel __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_GetTrustLevel
+#define IVectorView_CoreTextCompositionSegment_GetAt __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_GetAt
+#define IVectorView_CoreTextCompositionSegment_get_Size __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_get_Size
+#define IVectorView_CoreTextCompositionSegment_IndexOf __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_IndexOf
+#define IVectorView_CoreTextCompositionSegment_GetMany __FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_GetMany
+#endif /* WIDL_using_Windows_Foundation_Collections */
+#endif
+
+#endif
+
+#endif  /* ____FIVectorView_1_Windows__CUI__CText__CCore__CCoreTextCompositionSegment_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,IInspectable* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable, 0xef53b467, 0xc472, 0x5b59, 0xa8,0x27, 0x38,0xad,0xc3,0xa9,0xd3,0x26);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("ef53b467-c472-5b59-a827-38adc3a9d326")
+            ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,IInspectable* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextEditContext*, ABI::Windows::UI::Text::Core::ICoreTextEditContext* >, IInspectable* >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable, 0xef53b467, 0xc472, 0x5b59, 0xa8,0x27, 0x38,0xad,0xc3,0xa9,0xd3,0x26)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectableVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable *This);
+
+    /*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,IInspectable* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *sender,
+        IInspectable *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectableVtbl;
+
+interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,IInspectable* > methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable_QueryInterface(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable_AddRef(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable_Release(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,IInspectable* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable_Invoke(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable* This,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *sender,IInspectable *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_CoreTextEditContext_IInspectable IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable
+#define ITypedEventHandler_CoreTextEditContext_IInspectableVtbl __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectableVtbl
+#define ITypedEventHandler_CoreTextEditContext_IInspectable __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable
+#define ITypedEventHandler_CoreTextEditContext_IInspectable_QueryInterface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable_QueryInterface
+#define ITypedEventHandler_CoreTextEditContext_IInspectable_AddRef __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable_AddRef
+#define ITypedEventHandler_CoreTextEditContext_IInspectable_Release __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable_Release
+#define ITypedEventHandler_CoreTextEditContext_IInspectable_Invoke __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_IInspectable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextCompositionCompletedEventArgs* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs, 0xa2d7059e, 0x68ed, 0x5260, 0x8d,0x8e, 0x1d,0xcf,0x3d,0x25,0xd6,0x63);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("a2d7059e-68ed-5260-8d8e-1dcf3d25d663")
+            ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextCompositionCompletedEventArgs* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextEditContext*, ABI::Windows::UI::Text::Core::ICoreTextEditContext* >, ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextCompositionCompletedEventArgs*, ABI::Windows::UI::Text::Core::ICoreTextCompositionCompletedEventArgs* > >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs, 0xa2d7059e, 0x68ed, 0x5260, 0x8d,0x8e, 0x1d,0xcf,0x3d,0x25,0xd6,0x63)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs *This);
+
+    /*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextCompositionCompletedEventArgs* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *sender,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgsVtbl;
+
+interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextCompositionCompletedEventArgs* > methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs_QueryInterface(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs_AddRef(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs_Release(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextCompositionCompletedEventArgs* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs_Invoke(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *sender,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionCompletedEventArgs *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_CoreTextEditContext_CoreTextCompositionCompletedEventArgs IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs
+#define ITypedEventHandler_CoreTextEditContext_CoreTextCompositionCompletedEventArgsVtbl __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgsVtbl
+#define ITypedEventHandler_CoreTextEditContext_CoreTextCompositionCompletedEventArgs __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs
+#define ITypedEventHandler_CoreTextEditContext_CoreTextCompositionCompletedEventArgs_QueryInterface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs_QueryInterface
+#define ITypedEventHandler_CoreTextEditContext_CoreTextCompositionCompletedEventArgs_AddRef __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs_AddRef
+#define ITypedEventHandler_CoreTextEditContext_CoreTextCompositionCompletedEventArgs_Release __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs_Release
+#define ITypedEventHandler_CoreTextEditContext_CoreTextCompositionCompletedEventArgs_Invoke __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionCompletedEventArgs_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextCompositionStartedEventArgs* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs, 0xe671d625, 0x5b59, 0x57e6, 0xa9,0x2e, 0x40,0x00,0x95,0x07,0x85,0x3a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("e671d625-5b59-57e6-a92e-40009507853a")
+            ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextCompositionStartedEventArgs* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextEditContext*, ABI::Windows::UI::Text::Core::ICoreTextEditContext* >, ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextCompositionStartedEventArgs*, ABI::Windows::UI::Text::Core::ICoreTextCompositionStartedEventArgs* > >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs, 0xe671d625, 0x5b59, 0x57e6, 0xa9,0x2e, 0x40,0x00,0x95,0x07,0x85,0x3a)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs *This);
+
+    /*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextCompositionStartedEventArgs* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *sender,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgsVtbl;
+
+interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextCompositionStartedEventArgs* > methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs_QueryInterface(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs_AddRef(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs_Release(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextCompositionStartedEventArgs* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs_Invoke(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *sender,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextCompositionStartedEventArgs *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_CoreTextEditContext_CoreTextCompositionStartedEventArgs IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs
+#define ITypedEventHandler_CoreTextEditContext_CoreTextCompositionStartedEventArgsVtbl __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgsVtbl
+#define ITypedEventHandler_CoreTextEditContext_CoreTextCompositionStartedEventArgs __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs
+#define ITypedEventHandler_CoreTextEditContext_CoreTextCompositionStartedEventArgs_QueryInterface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs_QueryInterface
+#define ITypedEventHandler_CoreTextEditContext_CoreTextCompositionStartedEventArgs_AddRef __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs_AddRef
+#define ITypedEventHandler_CoreTextEditContext_CoreTextCompositionStartedEventArgs_Release __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs_Release
+#define ITypedEventHandler_CoreTextEditContext_CoreTextCompositionStartedEventArgs_Invoke __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextCompositionStartedEventArgs_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextFormatUpdatingEventArgs* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs, 0x3e4ef599, 0x4cc2, 0x5248, 0xbf,0x2d, 0x13,0xf1,0x76,0x13,0xb0,0xa6);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("3e4ef599-4cc2-5248-bf2d-13f17613b0a6")
+            ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextFormatUpdatingEventArgs* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextEditContext*, ABI::Windows::UI::Text::Core::ICoreTextEditContext* >, ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextFormatUpdatingEventArgs*, ABI::Windows::UI::Text::Core::ICoreTextFormatUpdatingEventArgs* > >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs, 0x3e4ef599, 0x4cc2, 0x5248, 0xbf,0x2d, 0x13,0xf1,0x76,0x13,0xb0,0xa6)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs *This);
+
+    /*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextFormatUpdatingEventArgs* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *sender,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgsVtbl;
+
+interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextFormatUpdatingEventArgs* > methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs_QueryInterface(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs_AddRef(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs_Release(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextFormatUpdatingEventArgs* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs_Invoke(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *sender,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextFormatUpdatingEventArgs *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_CoreTextEditContext_CoreTextFormatUpdatingEventArgs IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs
+#define ITypedEventHandler_CoreTextEditContext_CoreTextFormatUpdatingEventArgsVtbl __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgsVtbl
+#define ITypedEventHandler_CoreTextEditContext_CoreTextFormatUpdatingEventArgs __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs
+#define ITypedEventHandler_CoreTextEditContext_CoreTextFormatUpdatingEventArgs_QueryInterface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs_QueryInterface
+#define ITypedEventHandler_CoreTextEditContext_CoreTextFormatUpdatingEventArgs_AddRef __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs_AddRef
+#define ITypedEventHandler_CoreTextEditContext_CoreTextFormatUpdatingEventArgs_Release __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs_Release
+#define ITypedEventHandler_CoreTextEditContext_CoreTextFormatUpdatingEventArgs_Invoke __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextFormatUpdatingEventArgs_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextLayoutRequestedEventArgs* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs, 0x1a5f5596, 0x561c, 0x57f6, 0xa4,0xff, 0xcb,0x85,0x01,0x3c,0x65,0x44);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("1a5f5596-561c-57f6-a4ff-cb85013c6544")
+            ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextLayoutRequestedEventArgs* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextEditContext*, ABI::Windows::UI::Text::Core::ICoreTextEditContext* >, ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextLayoutRequestedEventArgs*, ABI::Windows::UI::Text::Core::ICoreTextLayoutRequestedEventArgs* > >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs, 0x1a5f5596, 0x561c, 0x57f6, 0xa4,0xff, 0xcb,0x85,0x01,0x3c,0x65,0x44)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs *This);
+
+    /*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextLayoutRequestedEventArgs* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *sender,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgsVtbl;
+
+interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextLayoutRequestedEventArgs* > methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs_QueryInterface(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs_AddRef(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs_Release(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextLayoutRequestedEventArgs* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs_Invoke(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *sender,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextLayoutRequestedEventArgs *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_CoreTextEditContext_CoreTextLayoutRequestedEventArgs IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs
+#define ITypedEventHandler_CoreTextEditContext_CoreTextLayoutRequestedEventArgsVtbl __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgsVtbl
+#define ITypedEventHandler_CoreTextEditContext_CoreTextLayoutRequestedEventArgs __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs
+#define ITypedEventHandler_CoreTextEditContext_CoreTextLayoutRequestedEventArgs_QueryInterface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs_QueryInterface
+#define ITypedEventHandler_CoreTextEditContext_CoreTextLayoutRequestedEventArgs_AddRef __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs_AddRef
+#define ITypedEventHandler_CoreTextEditContext_CoreTextLayoutRequestedEventArgs_Release __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs_Release
+#define ITypedEventHandler_CoreTextEditContext_CoreTextLayoutRequestedEventArgs_Invoke __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextLayoutRequestedEventArgs_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextSelectionRequestedEventArgs* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs, 0x882e51e1, 0xf4a3, 0x57e5, 0x93,0x92, 0x6a,0x8c,0x38,0x57,0x91,0x81);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("882e51e1-f4a3-57e5-9392-6a8c38579181")
+            ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextSelectionRequestedEventArgs* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextEditContext*, ABI::Windows::UI::Text::Core::ICoreTextEditContext* >, ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextSelectionRequestedEventArgs*, ABI::Windows::UI::Text::Core::ICoreTextSelectionRequestedEventArgs* > >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs, 0x882e51e1, 0xf4a3, 0x57e5, 0x93,0x92, 0x6a,0x8c,0x38,0x57,0x91,0x81)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs *This);
+
+    /*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextSelectionRequestedEventArgs* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *sender,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgsVtbl;
+
+interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextSelectionRequestedEventArgs* > methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs_QueryInterface(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs_AddRef(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs_Release(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextSelectionRequestedEventArgs* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs_Invoke(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *sender,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionRequestedEventArgs *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_CoreTextEditContext_CoreTextSelectionRequestedEventArgs IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs
+#define ITypedEventHandler_CoreTextEditContext_CoreTextSelectionRequestedEventArgsVtbl __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgsVtbl
+#define ITypedEventHandler_CoreTextEditContext_CoreTextSelectionRequestedEventArgs __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs
+#define ITypedEventHandler_CoreTextEditContext_CoreTextSelectionRequestedEventArgs_QueryInterface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs_QueryInterface
+#define ITypedEventHandler_CoreTextEditContext_CoreTextSelectionRequestedEventArgs_AddRef __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs_AddRef
+#define ITypedEventHandler_CoreTextEditContext_CoreTextSelectionRequestedEventArgs_Release __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs_Release
+#define ITypedEventHandler_CoreTextEditContext_CoreTextSelectionRequestedEventArgs_Invoke __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionRequestedEventArgs_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextSelectionUpdatingEventArgs* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs, 0x6b140a40, 0xd461, 0x555a, 0xb6,0xeb, 0x5d,0xbb,0x8e,0x21,0x01,0xe5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("6b140a40-d461-555a-b6eb-5dbb8e2101e5")
+            ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextSelectionUpdatingEventArgs* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextEditContext*, ABI::Windows::UI::Text::Core::ICoreTextEditContext* >, ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextSelectionUpdatingEventArgs*, ABI::Windows::UI::Text::Core::ICoreTextSelectionUpdatingEventArgs* > >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs, 0x6b140a40, 0xd461, 0x555a, 0xb6,0xeb, 0x5d,0xbb,0x8e,0x21,0x01,0xe5)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs *This);
+
+    /*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextSelectionUpdatingEventArgs* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *sender,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgsVtbl;
+
+interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextSelectionUpdatingEventArgs* > methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs_QueryInterface(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs_AddRef(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs_Release(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextSelectionUpdatingEventArgs* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs_Invoke(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *sender,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextSelectionUpdatingEventArgs *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_CoreTextEditContext_CoreTextSelectionUpdatingEventArgs IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs
+#define ITypedEventHandler_CoreTextEditContext_CoreTextSelectionUpdatingEventArgsVtbl __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgsVtbl
+#define ITypedEventHandler_CoreTextEditContext_CoreTextSelectionUpdatingEventArgs __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs
+#define ITypedEventHandler_CoreTextEditContext_CoreTextSelectionUpdatingEventArgs_QueryInterface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs_QueryInterface
+#define ITypedEventHandler_CoreTextEditContext_CoreTextSelectionUpdatingEventArgs_AddRef __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs_AddRef
+#define ITypedEventHandler_CoreTextEditContext_CoreTextSelectionUpdatingEventArgs_Release __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs_Release
+#define ITypedEventHandler_CoreTextEditContext_CoreTextSelectionUpdatingEventArgs_Invoke __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextSelectionUpdatingEventArgs_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextTextRequestedEventArgs* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs, 0xc7e08176, 0x4134, 0x50b7, 0xbc,0x73, 0x72,0x9e,0x9f,0x9a,0xd2,0x2a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("c7e08176-4134-50b7-bc73-729e9f9ad22a")
+            ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextTextRequestedEventArgs* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextEditContext*, ABI::Windows::UI::Text::Core::ICoreTextEditContext* >, ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextTextRequestedEventArgs*, ABI::Windows::UI::Text::Core::ICoreTextTextRequestedEventArgs* > >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs, 0xc7e08176, 0x4134, 0x50b7, 0xbc,0x73, 0x72,0x9e,0x9f,0x9a,0xd2,0x2a)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs *This);
+
+    /*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextTextRequestedEventArgs* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *sender,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgsVtbl;
+
+interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextTextRequestedEventArgs* > methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs_QueryInterface(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs_AddRef(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs_Release(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextTextRequestedEventArgs* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs_Invoke(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *sender,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextRequestedEventArgs *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_CoreTextEditContext_CoreTextTextRequestedEventArgs IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs
+#define ITypedEventHandler_CoreTextEditContext_CoreTextTextRequestedEventArgsVtbl __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgsVtbl
+#define ITypedEventHandler_CoreTextEditContext_CoreTextTextRequestedEventArgs __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs
+#define ITypedEventHandler_CoreTextEditContext_CoreTextTextRequestedEventArgs_QueryInterface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs_QueryInterface
+#define ITypedEventHandler_CoreTextEditContext_CoreTextTextRequestedEventArgs_AddRef __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs_AddRef
+#define ITypedEventHandler_CoreTextEditContext_CoreTextTextRequestedEventArgs_Release __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs_Release
+#define ITypedEventHandler_CoreTextEditContext_CoreTextTextRequestedEventArgs_Invoke __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextRequestedEventArgs_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextTextUpdatingEventArgs* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs, 0xfd896a84, 0xdf7c, 0x50d5, 0x91,0x67, 0x58,0xf6,0x16,0xbd,0xdb,0x6e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("fd896a84-df7c-50d5-9167-58f616bddb6e")
+            ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextTextUpdatingEventArgs* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextEditContext*, ABI::Windows::UI::Text::Core::ICoreTextEditContext* >, ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextTextUpdatingEventArgs*, ABI::Windows::UI::Text::Core::ICoreTextTextUpdatingEventArgs* > >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs, 0xfd896a84, 0xdf7c, 0x50d5, 0x91,0x67, 0x58,0xf6,0x16,0xbd,0xdb,0x6e)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs *This);
+
+    /*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextTextUpdatingEventArgs* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *sender,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgsVtbl;
+
+interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextTextUpdatingEventArgs* > methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs_QueryInterface(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs_AddRef(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs_Release(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextEditContext*,ABI::Windows::UI::Text::Core::CoreTextTextUpdatingEventArgs* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs_Invoke(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs* This,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextEditContext *sender,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextTextUpdatingEventArgs *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_CoreTextEditContext_CoreTextTextUpdatingEventArgs IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs
+#define ITypedEventHandler_CoreTextEditContext_CoreTextTextUpdatingEventArgsVtbl __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgsVtbl
+#define ITypedEventHandler_CoreTextEditContext_CoreTextTextUpdatingEventArgs __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs
+#define ITypedEventHandler_CoreTextEditContext_CoreTextTextUpdatingEventArgs_QueryInterface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs_QueryInterface
+#define ITypedEventHandler_CoreTextEditContext_CoreTextTextUpdatingEventArgs_AddRef __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs_AddRef
+#define ITypedEventHandler_CoreTextEditContext_CoreTextTextUpdatingEventArgs_Release __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs_Release
+#define ITypedEventHandler_CoreTextEditContext_CoreTextTextUpdatingEventArgs_Invoke __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextEditContext_Windows__CUI__CText__CCore__CCoreTextTextUpdatingEventArgs_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextServicesManager*,IInspectable* > interface
+ */
+#ifndef ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable_INTERFACE_DEFINED__
+#define ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable, 0x112fb01d, 0x260a, 0x51c6, 0x91,0x98, 0x5d,0xb3,0xe6,0xe9,0xef,0x3d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("112fb01d-260a-51c6-9198-5db3e6e9ef3d")
+            ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextServicesManager*,IInspectable* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::UI::Text::Core::CoreTextServicesManager*, ABI::Windows::UI::Text::Core::ICoreTextServicesManager* >, IInspectable* >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable, 0x112fb01d, 0x260a, 0x51c6, 0x91,0x98, 0x5d,0xb3,0xe6,0xe9,0xef,0x3d)
+#endif
+#else
+typedef struct __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectableVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable *This);
+
+    /*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextServicesManager*,IInspectable* > methods ***/
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable *This,
+        __x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager *sender,
+        IInspectable *args);
+
+    END_INTERFACE
+} __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectableVtbl;
+
+interface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable {
+    CONST_VTBL __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextServicesManager*,IInspectable* > methods ***/
+#define __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable_QueryInterface(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable_AddRef(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable_Release(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ITypedEventHandler<ABI::Windows::UI::Text::Core::CoreTextServicesManager*,IInspectable* > methods ***/
+static inline HRESULT __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable_Invoke(__FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable* This,__x_ABI_CWindows_CUI_CText_CCore_CICoreTextServicesManager *sender,IInspectable *args) {
+    return This->lpVtbl->Invoke(This,sender,args);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_ITypedEventHandler_CoreTextServicesManager_IInspectable IID___FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable
+#define ITypedEventHandler_CoreTextServicesManager_IInspectableVtbl __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectableVtbl
+#define ITypedEventHandler_CoreTextServicesManager_IInspectable __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable
+#define ITypedEventHandler_CoreTextServicesManager_IInspectable_QueryInterface __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable_QueryInterface
+#define ITypedEventHandler_CoreTextServicesManager_IInspectable_AddRef __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable_AddRef
+#define ITypedEventHandler_CoreTextServicesManager_IInspectable_Release __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable_Release
+#define ITypedEventHandler_CoreTextServicesManager_IInspectable_Invoke __FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable_Invoke
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FITypedEventHandler_2_Windows__CUI__CText__CCore__CCoreTextServicesManager_IInspectable_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 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __windows_ui_text_core_h__ */
diff --git a/mingw-w64-headers/include/windows.ui.text.h b/mingw-w64-headers/include/windows.ui.text.h
new file mode 100644
index 0000000..a9c87c9
--- /dev/null
+++ b/mingw-w64-headers/include/windows.ui.text.h
@@ -0,0 +1,255 @@
+/*** Autogenerated by WIDL 11.5 from include/windows.ui.text.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 __windows_ui_text_h__
+#define __windows_ui_text_h__
+
+/* Forward declarations */
+
+#ifndef ____FIReference_1_UnderlineType_FWD_DEFINED__
+#define ____FIReference_1_UnderlineType_FWD_DEFINED__
+typedef interface __FIReference_1_UnderlineType __FIReference_1_UnderlineType;
+#ifdef __cplusplus
+#define __FIReference_1_UnderlineType ABI::Windows::Foundation::IReference<ABI::Windows::UI::Text::UnderlineType >
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
+
+#include <inspectable.h>
+#include <asyncinfo.h>
+#include <eventtoken.h>
+#include <windowscontracts.h>
+#include <windows.foundation.h>
+#include <windows.globalization.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+#define WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION 0xe0000
+#endif // defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
+
+#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
+#ifndef ____x_ABI_CWindows_CUI_CText_CUnderlineType_ENUM_DEFINED__
+#define ____x_ABI_CWindows_CUI_CText_CUnderlineType_ENUM_DEFINED__
+#ifdef __cplusplus
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace UI {
+            namespace Text {
+                enum UnderlineType {
+                    UnderlineType_Undefined = 0,
+                    UnderlineType_None = 1,
+                    UnderlineType_Single = 2,
+                    UnderlineType_Words = 3,
+                    UnderlineType_Double = 4,
+                    UnderlineType_Dotted = 5,
+                    UnderlineType_Dash = 6,
+                    UnderlineType_DashDot = 7,
+                    UnderlineType_DashDotDot = 8,
+                    UnderlineType_Wave = 9,
+                    UnderlineType_Thick = 10,
+                    UnderlineType_Thin = 11,
+                    UnderlineType_DoubleWave = 12,
+                    UnderlineType_HeavyWave = 13,
+                    UnderlineType_LongDash = 14,
+                    UnderlineType_ThickDash = 15,
+                    UnderlineType_ThickDashDot = 16,
+                    UnderlineType_ThickDashDotDot = 17,
+                    UnderlineType_ThickDotted = 18,
+                    UnderlineType_ThickLongDash = 19
+                };
+            }
+        }
+    }
+}
+extern "C" {
+#else
+enum __x_ABI_CWindows_CUI_CText_CUnderlineType {
+    UnderlineType_Undefined = 0,
+    UnderlineType_None = 1,
+    UnderlineType_Single = 2,
+    UnderlineType_Words = 3,
+    UnderlineType_Double = 4,
+    UnderlineType_Dotted = 5,
+    UnderlineType_Dash = 6,
+    UnderlineType_DashDot = 7,
+    UnderlineType_DashDotDot = 8,
+    UnderlineType_Wave = 9,
+    UnderlineType_Thick = 10,
+    UnderlineType_Thin = 11,
+    UnderlineType_DoubleWave = 12,
+    UnderlineType_HeavyWave = 13,
+    UnderlineType_LongDash = 14,
+    UnderlineType_ThickDash = 15,
+    UnderlineType_ThickDashDot = 16,
+    UnderlineType_ThickDashDotDot = 17,
+    UnderlineType_ThickDotted = 18,
+    UnderlineType_ThickLongDash = 19
+};
+#ifdef WIDL_using_Windows_UI_Text
+#define UnderlineType __x_ABI_CWindows_CUI_CText_CUnderlineType
+#endif /* WIDL_using_Windows_UI_Text */
+#endif
+
+#endif /* ____x_ABI_CWindows_CUI_CText_CUnderlineType_ENUM_DEFINED__ */
+#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
+#ifndef __cplusplus
+typedef enum __x_ABI_CWindows_CUI_CText_CUnderlineType __x_ABI_CWindows_CUI_CText_CUnderlineType;
+#endif /* __cplusplus */
+
+#ifndef ____FIReference_1_UnderlineType_FWD_DEFINED__
+#define ____FIReference_1_UnderlineType_FWD_DEFINED__
+typedef interface __FIReference_1_UnderlineType __FIReference_1_UnderlineType;
+#ifdef __cplusplus
+#define __FIReference_1_UnderlineType ABI::Windows::Foundation::IReference<ABI::Windows::UI::Text::UnderlineType >
+#endif /* __cplusplus */
+#endif
+
+/*****************************************************************************
+ * IReference<ABI::Windows::UI::Text::UnderlineType > interface
+ */
+#ifndef ____FIReference_1_UnderlineType_INTERFACE_DEFINED__
+#define ____FIReference_1_UnderlineType_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIReference_1_UnderlineType, 0x1b63ec17, 0x7b2b, 0x59fe, 0xab,0x9d, 0xb6,0x0e,0xa4,0xf9,0xc9,0xb8);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("1b63ec17-7b2b-59fe-ab9d-b60ea4f9c9b8")
+            IReference<ABI::Windows::UI::Text::UnderlineType > : IReference_impl<ABI::Windows::UI::Text::UnderlineType >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIReference_1_UnderlineType, 0x1b63ec17, 0x7b2b, 0x59fe, 0xab,0x9d, 0xb6,0x0e,0xa4,0xf9,0xc9,0xb8)
+#endif
+#else
+typedef struct __FIReference_1_UnderlineTypeVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIReference_1_UnderlineType *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIReference_1_UnderlineType *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIReference_1_UnderlineType *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIReference_1_UnderlineType *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIReference_1_UnderlineType *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIReference_1_UnderlineType *This,
+        TrustLevel *trustLevel);
+
+    /*** IReference<ABI::Windows::UI::Text::UnderlineType > methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Value)(
+        __FIReference_1_UnderlineType *This,
+        __x_ABI_CWindows_CUI_CText_CUnderlineType *value);
+
+    END_INTERFACE
+} __FIReference_1_UnderlineTypeVtbl;
+
+interface __FIReference_1_UnderlineType {
+    CONST_VTBL __FIReference_1_UnderlineTypeVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIReference_1_UnderlineType_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIReference_1_UnderlineType_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIReference_1_UnderlineType_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIReference_1_UnderlineType_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIReference_1_UnderlineType_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIReference_1_UnderlineType_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IReference<ABI::Windows::UI::Text::UnderlineType > methods ***/
+#define __FIReference_1_UnderlineType_get_Value(This,value) (This)->lpVtbl->get_Value(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIReference_1_UnderlineType_QueryInterface(__FIReference_1_UnderlineType* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIReference_1_UnderlineType_AddRef(__FIReference_1_UnderlineType* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIReference_1_UnderlineType_Release(__FIReference_1_UnderlineType* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIReference_1_UnderlineType_GetIids(__FIReference_1_UnderlineType* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIReference_1_UnderlineType_GetRuntimeClassName(__FIReference_1_UnderlineType* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIReference_1_UnderlineType_GetTrustLevel(__FIReference_1_UnderlineType* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IReference<ABI::Windows::UI::Text::UnderlineType > methods ***/
+static inline HRESULT __FIReference_1_UnderlineType_get_Value(__FIReference_1_UnderlineType* This,__x_ABI_CWindows_CUI_CText_CUnderlineType *value) {
+    return This->lpVtbl->get_Value(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IReference_UnderlineType IID___FIReference_1_UnderlineType
+#define IReference_UnderlineTypeVtbl __FIReference_1_UnderlineTypeVtbl
+#define IReference_UnderlineType __FIReference_1_UnderlineType
+#define IReference_UnderlineType_QueryInterface __FIReference_1_UnderlineType_QueryInterface
+#define IReference_UnderlineType_AddRef __FIReference_1_UnderlineType_AddRef
+#define IReference_UnderlineType_Release __FIReference_1_UnderlineType_Release
+#define IReference_UnderlineType_GetIids __FIReference_1_UnderlineType_GetIids
+#define IReference_UnderlineType_GetRuntimeClassName __FIReference_1_UnderlineType_GetRuntimeClassName
+#define IReference_UnderlineType_GetTrustLevel __FIReference_1_UnderlineType_GetTrustLevel
+#define IReference_UnderlineType_get_Value __FIReference_1_UnderlineType_get_Value
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FIReference_1_UnderlineType_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __windows_ui_text_h__ */
diff --git a/mingw-w64-headers/include/windows.ui.viewmanagement.core.h b/mingw-w64-headers/include/windows.ui.viewmanagement.core.h
index fd871d8..ba65c12 100644
--- a/mingw-w64-headers/include/windows.ui.viewmanagement.core.h
+++ b/mingw-w64-headers/include/windows.ui.viewmanagement.core.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.ui.viewmanagement.core.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.ui.viewmanagement.core.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.viewmanagement.h b/mingw-w64-headers/include/windows.ui.viewmanagement.h
index 5c0764c..17789b5 100644
--- a/mingw-w64-headers/include/windows.ui.viewmanagement.h
+++ b/mingw-w64-headers/include/windows.ui.viewmanagement.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.ui.viewmanagement.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.ui.viewmanagement.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
@@ -1068,6 +1068,14 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____FIReference_1_UIElementType_FWD_DEFINED__
+#define ____FIReference_1_UIElementType_FWD_DEFINED__
+typedef interface __FIReference_1_UIElementType __FIReference_1_UIElementType;
+#ifdef __cplusplus
+#define __FIReference_1_UIElementType ABI::Windows::Foundation::IReference<ABI::Windows::UI::ViewManagement::UIElementType >
+#endif /* __cplusplus */
+#endif
+
 /* Headers for imported files */
 
 #include <inspectable.h>
@@ -2377,6 +2385,14 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef ____FIReference_1_UIElementType_FWD_DEFINED__
+#define ____FIReference_1_UIElementType_FWD_DEFINED__
+typedef interface __FIReference_1_UIElementType __FIReference_1_UIElementType;
+#ifdef __cplusplus
+#define __FIReference_1_UIElementType ABI::Windows::Foundation::IReference<ABI::Windows::UI::ViewManagement::UIElementType >
+#endif /* __cplusplus */
+#endif
+
 #if !defined(WINDOWS_UI_VIEWMANAGEMENT_VIEWMANAGEMENTVIEWSCALINGCONTRACT_VERSION)
 #define WINDOWS_UI_VIEWMANAGEMENT_VIEWMANAGEMENTVIEWSCALINGCONTRACT_VERSION 0x10000
 #endif // defined(WINDOWS_UI_VIEWMANAGEMENT_VIEWMANAGEMENTVIEWSCALINGCONTRACT_VERSION)
@@ -10180,6 +10196,128 @@
 
 #endif  /* ____FITypedEventHandler_2_Windows__CUI__CViewManagement__CInputPane_Windows__CUI__CViewManagement__CInputPaneVisibilityEventArgs_INTERFACE_DEFINED__ */
 
+/*****************************************************************************
+ * IReference<ABI::Windows::UI::ViewManagement::UIElementType > interface
+ */
+#ifndef ____FIReference_1_UIElementType_INTERFACE_DEFINED__
+#define ____FIReference_1_UIElementType_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID___FIReference_1_UIElementType, 0xe17e08c9, 0x7deb, 0x51d1, 0x84,0x87, 0x33,0x4e,0xb3,0xfe,0x46,0x91);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+} /* extern "C" */
+namespace ABI {
+    namespace Windows {
+        namespace Foundation {
+            template<>
+            MIDL_INTERFACE("e17e08c9-7deb-51d1-8487-334eb3fe4691")
+            IReference<ABI::Windows::UI::ViewManagement::UIElementType > : IReference_impl<ABI::Windows::UI::ViewManagement::UIElementType >
+            {
+            };
+        }
+    }
+}
+extern "C" {
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(__FIReference_1_UIElementType, 0xe17e08c9, 0x7deb, 0x51d1, 0x84,0x87, 0x33,0x4e,0xb3,0xfe,0x46,0x91)
+#endif
+#else
+typedef struct __FIReference_1_UIElementTypeVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        __FIReference_1_UIElementType *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        __FIReference_1_UIElementType *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        __FIReference_1_UIElementType *This);
+
+    /*** IInspectable methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIids)(
+        __FIReference_1_UIElementType *This,
+        ULONG *iidCount,
+        IID **iids);
+
+    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
+        __FIReference_1_UIElementType *This,
+        HSTRING *className);
+
+    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
+        __FIReference_1_UIElementType *This,
+        TrustLevel *trustLevel);
+
+    /*** IReference<ABI::Windows::UI::ViewManagement::UIElementType > methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Value)(
+        __FIReference_1_UIElementType *This,
+        __x_ABI_CWindows_CUI_CViewManagement_CUIElementType *value);
+
+    END_INTERFACE
+} __FIReference_1_UIElementTypeVtbl;
+
+interface __FIReference_1_UIElementType {
+    CONST_VTBL __FIReference_1_UIElementTypeVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define __FIReference_1_UIElementType_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define __FIReference_1_UIElementType_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define __FIReference_1_UIElementType_Release(This) (This)->lpVtbl->Release(This)
+/*** IInspectable methods ***/
+#define __FIReference_1_UIElementType_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
+#define __FIReference_1_UIElementType_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
+#define __FIReference_1_UIElementType_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
+/*** IReference<ABI::Windows::UI::ViewManagement::UIElementType > methods ***/
+#define __FIReference_1_UIElementType_get_Value(This,value) (This)->lpVtbl->get_Value(This,value)
+#else
+/*** IUnknown methods ***/
+static inline HRESULT __FIReference_1_UIElementType_QueryInterface(__FIReference_1_UIElementType* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static inline ULONG __FIReference_1_UIElementType_AddRef(__FIReference_1_UIElementType* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static inline ULONG __FIReference_1_UIElementType_Release(__FIReference_1_UIElementType* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IInspectable methods ***/
+static inline HRESULT __FIReference_1_UIElementType_GetIids(__FIReference_1_UIElementType* This,ULONG *iidCount,IID **iids) {
+    return This->lpVtbl->GetIids(This,iidCount,iids);
+}
+static inline HRESULT __FIReference_1_UIElementType_GetRuntimeClassName(__FIReference_1_UIElementType* This,HSTRING *className) {
+    return This->lpVtbl->GetRuntimeClassName(This,className);
+}
+static inline HRESULT __FIReference_1_UIElementType_GetTrustLevel(__FIReference_1_UIElementType* This,TrustLevel *trustLevel) {
+    return This->lpVtbl->GetTrustLevel(This,trustLevel);
+}
+/*** IReference<ABI::Windows::UI::ViewManagement::UIElementType > methods ***/
+static inline HRESULT __FIReference_1_UIElementType_get_Value(__FIReference_1_UIElementType* This,__x_ABI_CWindows_CUI_CViewManagement_CUIElementType *value) {
+    return This->lpVtbl->get_Value(This,value);
+}
+#endif
+#ifdef WIDL_using_Windows_Foundation
+#define IID_IReference_UIElementType IID___FIReference_1_UIElementType
+#define IReference_UIElementTypeVtbl __FIReference_1_UIElementTypeVtbl
+#define IReference_UIElementType __FIReference_1_UIElementType
+#define IReference_UIElementType_QueryInterface __FIReference_1_UIElementType_QueryInterface
+#define IReference_UIElementType_AddRef __FIReference_1_UIElementType_AddRef
+#define IReference_UIElementType_Release __FIReference_1_UIElementType_Release
+#define IReference_UIElementType_GetIids __FIReference_1_UIElementType_GetIids
+#define IReference_UIElementType_GetRuntimeClassName __FIReference_1_UIElementType_GetRuntimeClassName
+#define IReference_UIElementType_GetTrustLevel __FIReference_1_UIElementType_GetTrustLevel
+#define IReference_UIElementType_get_Value __FIReference_1_UIElementType_get_Value
+#endif /* WIDL_using_Windows_Foundation */
+#endif
+
+#endif
+
+#endif  /* ____FIReference_1_UIElementType_INTERFACE_DEFINED__ */
+
 /* Begin additional prototypes for all interfaces */
 
 ULONG           __RPC_USER HSTRING_UserSize     (ULONG *, ULONG, HSTRING *);
diff --git a/mingw-w64-headers/include/windows.ui.windowmanagement.h b/mingw-w64-headers/include/windows.ui.windowmanagement.h
index 11d2cda..434c846 100644
--- a/mingw-w64-headers/include/windows.ui.windowmanagement.h
+++ b/mingw-w64-headers/include/windows.ui.windowmanagement.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.ui.windowmanagement.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.ui.windowmanagement.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.xaml.h b/mingw-w64-headers/include/windows.ui.xaml.h
index 14bc909..d9629ab 100644
--- a/mingw-w64-headers/include/windows.ui.xaml.h
+++ b/mingw-w64-headers/include/windows.ui.xaml.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.ui.xaml.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.ui.xaml.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.xaml.hosting.desktopwindowxamlsource.h b/mingw-w64-headers/include/windows.ui.xaml.hosting.desktopwindowxamlsource.h
index fefc77c..499d8ec 100644
--- a/mingw-w64-headers/include/windows.ui.xaml.hosting.desktopwindowxamlsource.h
+++ b/mingw-w64-headers/include/windows.ui.xaml.hosting.desktopwindowxamlsource.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.ui.xaml.hosting.desktopwindowxamlsource.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.ui.xaml.hosting.desktopwindowxamlsource.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windows.ui.xaml.interop.h b/mingw-w64-headers/include/windows.ui.xaml.interop.h
index 35802cf..77b2eed 100644
--- a/mingw-w64-headers/include/windows.ui.xaml.interop.h
+++ b/mingw-w64-headers/include/windows.ui.xaml.interop.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windows.ui.xaml.interop.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windows.ui.xaml.interop.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/windowscontracts.h b/mingw-w64-headers/include/windowscontracts.h
index 712640a..23dfc62 100644
--- a/mingw-w64-headers/include/windowscontracts.h
+++ b/mingw-w64-headers/include/windowscontracts.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/windowscontracts.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/windowscontracts.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmcodecdsp.h b/mingw-w64-headers/include/wmcodecdsp.h
index 09885d7..152ba9e 100644
--- a/mingw-w64-headers/include/wmcodecdsp.h
+++ b/mingw-w64-headers/include/wmcodecdsp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wmcodecdsp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wmcodecdsp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmcontainer.h b/mingw-w64-headers/include/wmcontainer.h
index ca7c478..67d818e 100644
--- a/mingw-w64-headers/include/wmcontainer.h
+++ b/mingw-w64-headers/include/wmcontainer.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wmcontainer.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wmcontainer.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmdrmsdk.h b/mingw-w64-headers/include/wmdrmsdk.h
index 702284e..1a23a3b 100644
--- a/mingw-w64-headers/include/wmdrmsdk.h
+++ b/mingw-w64-headers/include/wmdrmsdk.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wmdrmsdk.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wmdrmsdk.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmp.h b/mingw-w64-headers/include/wmp.h
index a299133..81a529f 100644
--- a/mingw-w64-headers/include/wmp.h
+++ b/mingw-w64-headers/include/wmp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wmp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wmp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmprealestate.h b/mingw-w64-headers/include/wmprealestate.h
index b8b3173..987ab28 100644
--- a/mingw-w64-headers/include/wmprealestate.h
+++ b/mingw-w64-headers/include/wmprealestate.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wmprealestate.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wmprealestate.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmpservices.h b/mingw-w64-headers/include/wmpservices.h
index 68480c6..b49e4b9 100644
--- a/mingw-w64-headers/include/wmpservices.h
+++ b/mingw-w64-headers/include/wmpservices.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wmpservices.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wmpservices.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmsbuffer.h b/mingw-w64-headers/include/wmsbuffer.h
index be10758..32c6725 100644
--- a/mingw-w64-headers/include/wmsbuffer.h
+++ b/mingw-w64-headers/include/wmsbuffer.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wmsbuffer.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wmsbuffer.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmsdkidl.h b/mingw-w64-headers/include/wmsdkidl.h
index 0758be8..4762238 100644
--- a/mingw-w64-headers/include/wmsdkidl.h
+++ b/mingw-w64-headers/include/wmsdkidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wmsdkidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wmsdkidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmsecure.h b/mingw-w64-headers/include/wmsecure.h
index 0249f89..34908c5 100644
--- a/mingw-w64-headers/include/wmsecure.h
+++ b/mingw-w64-headers/include/wmsecure.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wmsecure.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wmsecure.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wpcapi.h b/mingw-w64-headers/include/wpcapi.h
index afd3641..c3bb006 100644
--- a/mingw-w64-headers/include/wpcapi.h
+++ b/mingw-w64-headers/include/wpcapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wpcapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wpcapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsdattachment.h b/mingw-w64-headers/include/wsdattachment.h
index 3826de2..f63934b 100644
--- a/mingw-w64-headers/include/wsdattachment.h
+++ b/mingw-w64-headers/include/wsdattachment.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wsdattachment.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wsdattachment.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsdbase.h b/mingw-w64-headers/include/wsdbase.h
index d7d8aa2..c9e8597 100644
--- a/mingw-w64-headers/include/wsdbase.h
+++ b/mingw-w64-headers/include/wsdbase.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wsdbase.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wsdbase.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsdclient.h b/mingw-w64-headers/include/wsdclient.h
index f636b57..d2126cd 100644
--- a/mingw-w64-headers/include/wsdclient.h
+++ b/mingw-w64-headers/include/wsdclient.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wsdclient.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wsdclient.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsddisco.h b/mingw-w64-headers/include/wsddisco.h
index b78ce2c..f5d8e8c 100644
--- a/mingw-w64-headers/include/wsddisco.h
+++ b/mingw-w64-headers/include/wsddisco.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wsddisco.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wsddisco.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsdhost.h b/mingw-w64-headers/include/wsdhost.h
index 3c59916..9e0dca3 100644
--- a/mingw-w64-headers/include/wsdhost.h
+++ b/mingw-w64-headers/include/wsdhost.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wsdhost.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wsdhost.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsdxml.h b/mingw-w64-headers/include/wsdxml.h
index e6c4246..a14299c 100644
--- a/mingw-w64-headers/include/wsdxml.h
+++ b/mingw-w64-headers/include/wsdxml.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wsdxml.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wsdxml.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wsmandisp.h b/mingw-w64-headers/include/wsmandisp.h
index 6f2b111..efbe69c 100644
--- a/mingw-w64-headers/include/wsmandisp.h
+++ b/mingw-w64-headers/include/wsmandisp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wsmandisp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wsmandisp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wtypes.h b/mingw-w64-headers/include/wtypes.h
index e23106f..90dc793 100644
--- a/mingw-w64-headers/include/wtypes.h
+++ b/mingw-w64-headers/include/wtypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wtypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wtypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wtypesbase.h b/mingw-w64-headers/include/wtypesbase.h
index a3a22f0..2d5f838 100644
--- a/mingw-w64-headers/include/wtypesbase.h
+++ b/mingw-w64-headers/include/wtypesbase.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wtypesbase.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wtypesbase.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wuapi.h b/mingw-w64-headers/include/wuapi.h
index d732cdf..12d18fe 100644
--- a/mingw-w64-headers/include/wuapi.h
+++ b/mingw-w64-headers/include/wuapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/wuapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/wuapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xamlom.h b/mingw-w64-headers/include/xamlom.h
index 9200026..813947c 100644
--- a/mingw-w64-headers/include/xamlom.h
+++ b/mingw-w64-headers/include/xamlom.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/xamlom.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/xamlom.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xapo.h b/mingw-w64-headers/include/xapo.h
index c010da0..1ccb807 100644
--- a/mingw-w64-headers/include/xapo.h
+++ b/mingw-w64-headers/include/xapo.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/xapo.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/xapo.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xaudio2.h b/mingw-w64-headers/include/xaudio2.h
index 1ceb1ed..96eac48 100644
--- a/mingw-w64-headers/include/xaudio2.h
+++ b/mingw-w64-headers/include/xaudio2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/xaudio2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/xaudio2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xaudio2fx.h b/mingw-w64-headers/include/xaudio2fx.h
index b1e9930..0040163 100644
--- a/mingw-w64-headers/include/xaudio2fx.h
+++ b/mingw-w64-headers/include/xaudio2fx.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/xaudio2fx.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/xaudio2fx.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xmllite.h b/mingw-w64-headers/include/xmllite.h
index d794a72..134f706 100644
--- a/mingw-w64-headers/include/xmllite.h
+++ b/mingw-w64-headers/include/xmllite.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/xmllite.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/xmllite.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xpsdigitalsignature.h b/mingw-w64-headers/include/xpsdigitalsignature.h
index 03ec27f..32211e1 100644
--- a/mingw-w64-headers/include/xpsdigitalsignature.h
+++ b/mingw-w64-headers/include/xpsdigitalsignature.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/xpsdigitalsignature.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/xpsdigitalsignature.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xpsobjectmodel.h b/mingw-w64-headers/include/xpsobjectmodel.h
index d99f408..fb663a5 100644
--- a/mingw-w64-headers/include/xpsobjectmodel.h
+++ b/mingw-w64-headers/include/xpsobjectmodel.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/xpsobjectmodel.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/xpsobjectmodel.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xpsobjectmodel_1.h b/mingw-w64-headers/include/xpsobjectmodel_1.h
index 359edb4..bcfe70a 100644
--- a/mingw-w64-headers/include/xpsobjectmodel_1.h
+++ b/mingw-w64-headers/include/xpsobjectmodel_1.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/xpsobjectmodel_1.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/xpsobjectmodel_1.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xpsprint.h b/mingw-w64-headers/include/xpsprint.h
index b886721..db8d8a6 100644
--- a/mingw-w64-headers/include/xpsprint.h
+++ b/mingw-w64-headers/include/xpsprint.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/xpsprint.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/xpsprint.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xpsrassvc.h b/mingw-w64-headers/include/xpsrassvc.h
index a2e1e0f..25f725c 100644
--- a/mingw-w64-headers/include/xpsrassvc.h
+++ b/mingw-w64-headers/include/xpsrassvc.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 11.0-rc1 from include/xpsrassvc.idl - Do not edit ***/
+/*** Autogenerated by WIDL 11.5 from include/xpsrassvc.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
